reduxを参考にしてreact状態管理方案を実現する
9841 ワード
reactステータス管理スキームは多く、その中で最も簡単で最もよく使われるのはreduxです.
redux実装
reduxはステータス管理を行い、reducerとactionを利用して実現したstateの更新です.reduxを使用するには、いくつかのステップが必要です. actions
Actions.jsの作成
reducer
reducers.jsの作成
入口文 プロジェクトのエントリファイル
Appコンポーネント ビジネスコンポーネントコード
redux実装原理
reduxはステータス管理ツールであり、react-reduxによりreactコンポーネントがreduxと結合できるようにします.
Provider
Providerは、storeがすべてのサブコンポーネントによって共有されることを実現するために、最外層にいる必要がある高次コンポーネントです.
connect
Connectメソッドはreactコンポーネントをstoreに接続する方法です.Connectメソッドは、コンポーネントが使用するstateとトリガするアクションをreactコンポーネントのプロパティにマッピングします.
詳しくはreact-reduxドキュメントを参照してください
なぜreduxを使わないの?
reduxは、非常にシステム的で完全なstate管理スキームを提供しています.ドキュメントの一言では、次のようになります.
更新の発生時間を制限ことにより、Reduxはstateの変化を予測可能にしようとする.
彼は完全なので、比較的複雑で、より多くの構成が必要です.小さなプロジェクトではより簡便なステータス管理シナリオが欲しいのでreduxを捨てて他のシナリオを探します.
xudox実装決定用法 完全例 原理概要 使用方法の決定
目的は最も簡単に使うことなので、私はこのように使うかもしれません.
コードからreduxと似ているように見え、dispatchが緩和され、stateが直接変更されただけだ.他の設定は?初期state値を手動で設定する以外は、設定する必要はありません.
stateの初期値の設定
完全な例エントリファイル index.js
アセンブリ内 app.js
簡単な2部でステータス管理が完了しました.例は、コンポーネント内のstateレンダリング後のビューで、ビューがイベントを開始してstateを変更し、stateが開始ビューの再レンダリングを変更します.マルチコンポーネント間の通信は同じです.
原理の概要
xuduxの原理を簡単に紹介します.原理は簡単で、connectは高次コンポーネントを形成し、高次コンポーネントの内部でstateの変化を傍受し、stateが変化すると伝達されたreactコンポーネントpropsが変化し、再レンダリングされる.reduxもたぶんこのような論理です.
setState$メソッド:このメソッドは、xudux内部でstateを更新するメソッドです.任意のコンポーネントがこのメソッドを呼び出すと、xudux内のstate更新がトリガーされ、state更新はすべてのコンポーネントにプッシュされ、各コンポーネントは自身のstateが変更されたかどうかを判断し、reactコンポーネントが更新されるかどうかを決定します.
の最後の部分
興味のある方は試してみてください github
redux実装
reduxはステータス管理を行い、reducerとactionを利用して実現したstateの更新です.reduxを使用するには、いくつかのステップが必要です.
Actions.jsの作成
// actions.js
export const SET_NAME = 'SET_NAME';
export const setName = (name) => {
return {
type: SET_NAME,
name,
}
}
reducers.jsの作成
// reducers.js
import {SET_NAME} from './actions';
const nameState = (state = '', action) => {
switch(action.type) {
case SET_NAME: {
return action.name;
}
default: {
return state;
}
}
}
export default nameState;
// index.js
import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { createStore } from 'redux'
import rootReducer from './reducers'
import App from './App'
const store = createStore(rootReducer)
render(
,
document.getElementById('root')
)
import React, { Component } from 'react';
import { connect } from 'react-redux';
import {setName} from './actions';
class App extends Component {
constructor(props) {
super(props);
}
handleClick() {
this.props.setName(' ')
}
render() {
return (
{this.props.name}
)
}
}
const mapStateToProps = (state) => {
return {
name: state.name,
};
};
const mapDispatchToProps = (dispatch) => {
return {
setName(name) {
dispatch(setName(name));
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(App);
redux実装原理
reduxはステータス管理ツールであり、react-reduxによりreactコンポーネントがreduxと結合できるようにします.
Provider
Providerは、storeがすべてのサブコンポーネントによって共有されることを実現するために、最外層にいる必要がある高次コンポーネントです.
connect
Connectメソッドはreactコンポーネントをstoreに接続する方法です.Connectメソッドは、コンポーネントが使用するstateとトリガするアクションをreactコンポーネントのプロパティにマッピングします.
詳しくはreact-reduxドキュメントを参照してください
なぜreduxを使わないの?
reduxは、非常にシステム的で完全なstate管理スキームを提供しています.ドキュメントの一言では、次のようになります.
更新の発生時間を制限ことにより、Reduxはstateの変化を予測可能にしようとする.
彼は完全なので、比較的複雑で、より多くの構成が必要です.小さなプロジェクトではより簡便なステータス管理シナリオが欲しいのでreduxを捨てて他のシナリオを探します.
xudox実装
目的は最も簡単に使うことなので、私はこのように使うかもしれません.
//
import React, { Component } from 'react';
import {connect} from 'xubox';
class AA extends Component {
constructor(props) {
super(props)
}
handleClick() {
// setState$ , state
this.props.setState$({
name: ' '
})
}
render() {
return (
{this.props.name}
)
}
}
// redux , state
const mapStateToProps = (state) => {
return {
name: state.name,
};
};
// redux , mapStateToProps
connect(mapStateToProps)(AA);
コードからreduxと似ているように見え、dispatchが緩和され、stateが直接変更されただけだ.他の設定は?初期state値を手動で設定する以外は、設定する必要はありません.
stateの初期値の設定
//
import configureState from 'xubox';
configureState({
name: localStorage.getItem('name') || ' '
});
完全な例
import React from 'react';
import ReactDOM from 'react-dom';
import App from './app.js'
import configure from 'xudux';
// state
let state = {
name: ' ',
};
configure(state);
ReactDOM.render(
, document.getElementById('root'));
import React, { Component } from 'react';
import { connect } from 'xudux';
class App extends Component {
constructor(props) {
super(props);
}
handleClick() {
this.props.setState$({
name: ' ',
});
}
render() {
return (
{this.props.name}
)
}
}
const mapStateToProps = (state) => {
return {
name: state.name,
};
};
export default connect(mapStateToProps)(App);
簡単な2部でステータス管理が完了しました.例は、コンポーネント内のstateレンダリング後のビューで、ビューがイベントを開始してstateを変更し、stateが開始ビューの再レンダリングを変更します.マルチコンポーネント間の通信は同じです.
原理の概要
xuduxの原理を簡単に紹介します.原理は簡単で、connectは高次コンポーネントを形成し、高次コンポーネントの内部でstateの変化を傍受し、stateが変化すると伝達されたreactコンポーネントpropsが変化し、再レンダリングされる.reduxもたぶんこのような論理です.
setState$メソッド:このメソッドは、xudux内部でstateを更新するメソッドです.任意のコンポーネントがこのメソッドを呼び出すと、xudux内のstate更新がトリガーされ、state更新はすべてのコンポーネントにプッシュされ、各コンポーネントは自身のstateが変更されたかどうかを判断し、reactコンポーネントが更新されるかどうかを決定します.
の最後の部分
興味のある方は試してみてください github