reactノート
5018 ワード
reactとvueの比較
同じ reactとvueはすべてコンポーネント化の思想があってすべて仮想DOM があります reactおよびvueは、コンポーネント化ビュー応答型データ概念 を提供する. reactとvueの両方にコアレンダリングコンポーネントがあるAPI(Vue.component/React.createClass)は、ルーティングの概念が同じルーティングメカニズムで完全に対応するコンポーネントのライフサイクルがそれぞれ成熟した生態圏 を持っている.
異なる react javascript xmlによってコンポーネントvueを記述templateテンプレートによってコンポーネント をネストする vue reactよりもレンダリング速度が速いreact比較vue比較的複雑なフレームワークreactビジネスロジックスーパー変態のプロジェクト に適用データ転送方式が異なるライフサイクルが異なるレンダリングテンプレートが異なる{react}{{vue} 特長コンポーネント名の頭文字は、どのコンポーネントも1つの最上位ラベル しか大文字でなければなりません. renderコンポーネントライフサイクルフック関数仮想DOMをJSメモリから読み出し、リアルDOM にレンダリングするのを待つライフサイクルフェーズmount(ロード)update(更新)unmount(破棄) カスタム関数handleClick onClick={this.handleClick} データ伝達キャリアコンポーネント通信props(属性)state(状態) jsx構文規則
HTMLタグ(<で始まる)に出会ったら、HTMLルールで解析します.コードブロック({で始まる)に遭遇したらJavaScriptルールで解析する
react書式 classに基づくがreactはclass の代わりにclassNameを必要とするインラインスタイルに基づくstyle style={obj}アルパカの名前に従ってstyle={backgroundColor:"red",fontSize:20}lineHeight:'20 px'はユニット を持たなければならないグローバル変数外部スタイルプロトタイプチェーンマウント state状態reactコンポーネントデータインタラクションのベクター状態を修正するために使用される stateコンポーネント外部で定義できないコンポーネント外部で変更できないコンポーネント内部で定義宣言できる内部でのみ変更できる . state修正用this.state取得state,this.setState()はstate を修正する stateコンポーネント内部のgetInitialStateで定義stateを初期化するには、オブジェクト を返す必要があります. state setStateこの方法はstateがコンポーネント内部のrenderメソッドを再実行することを修正し、ページの二次レンダリング仮想DOMがreactのdiffアルゴリズムに基づいて新しい仮想DOMの最後のロットの更新 をトリガする.
親コンポーネントのサブコンポーネントの変更方法親コンポーネントコンポーネントコンポーネントは、サブコンポーネントのpropsとともにコンポーネントのstateをサブコンポーネント に渡す.親コンポーネント変更stateは、変更されたpropsを2回renderサブコンポーネントに受信し、サブコンポーネント変更 を実現する.
ref this.refsオブジェクト取得 refは、DOM要素がこの真のDOM要素を指す に作用する. refは、コンポーネントがこのコンポーネントオブジェクトを指す に作用する.
React基本構文
Reduxのデフォルトでは同期のみが処理されます.非同期タスクにはreact-thunkが必要です.
redux devtools開発者ツールの導入(拡張プログラム)
react-redux優雅な結合reactとredux()
同じ
異なる
HTMLタグ(<で始まる)に出会ったら、HTMLルールで解析します.コードブロック({で始まる)に遭遇したらJavaScriptルールで解析する
react書式
親コンポーネントのサブコンポーネントの変更方法
ref this.refsオブジェクト取得
React基本構文
import React from 'react' // React
class App extends React.Component{ // React.Component
constructor (props){ //
super(props)
this.state = {
solders:['a ','b','c']
}
}
render(){
return hello {this.props.world}
}
}
function com(){
return
}
// this.setState()
add(){
this.setState({ solders:[...this.state.solders,'d']}); //
}
Reduxのデフォルトでは同期のみが処理されます.非同期タスクにはreact-thunkが必要です.
redux
npm install redux --save
import { createStore } from 'redux' store
import { counter,addGUN,removeGUN } from './index.redux.js' // reducer action
let store = createStore(counter); // store
function render(){ // store, addGUN,removeGUN, , addGUN store
ReactDOM.render(,document.getElementById('root') )
}
render();
store.subscribe(render); // , store( ) , render()
// store.dispatch(addGUN( ))
---------------------------------- redux-thunk
npm install redux-thunk --save
redux
import { createStore , applyMiddleware } from './index.redux'
thunk
import thunk from 'redux-thunk'
: store , applyMiddleware ( thunk )
const store = createStore(counter, applyMiddleware( thunk ) );
,
export function addGunAsync(){
return function(dispatch){ // , addGUN
setTimeout(()=>{
dispatch(addGUN());
},2000)
}
}
redux devtools開発者ツールの導入(拡張プログラム)
// compose
import {createStore , applyMiddleware , compose} from 'redux'
const reduxDevtools = window.devToolsExtension? window.devToolsExtension() :f=>f
// window.devToolsExtension
const store = createStore(counter,compose(
applyMiddleware(thunk),
reduxDevtools
)) // store reduxDevtools
react-redux優雅な結合reactとredux()
: react-redux
npm install react-redux --save
: react-redux
import { Provider } from 'react-redux' // Provider
: Provider Connect store.subscribe
①Provider , store
ReactDOM.render(
// store Provider, Provider App ,
// (addGUN() )
,document.getElementById('root') )
②Connect ,Connect
app.js Connect
import { Connect } from 'react-redux'
import { addGUN,removeGUN} from './index.redux.js'
const mapStateProps(state){
return {num:state}
}
const actionCreators = { addGUN, removeGUN } App action
App = connect( mapStatetoProps , actionCreators )(App) // App , App
connect : props
。 props , dispatch