見ればわかる例はreact-reduxで正しい姿勢を教えます.
5393 ワード
whay write this:たくさんの白さんはたくさんの教程を見てから、コードを打つ時、どのような手順で進行するべきか分かりません.この文章は一歩ずつ過程を分解して、ゆっくりと動作して再生します.
このデモの機能はinputタグに内容を入力し、上に表示されているpタグに同期して表示します.DEMOは簡単です.
プロジェクトコードはここです.https://github.com/oliyg/redu...
clone:https://github.com/oliyg/redu...
余計なことを言わない
最初に上の図:
ファイルディレクトリは以下の通りです.
私の位置:component/Texture.js
まずcomponentから切ります.
必要な依存性を取り入れる:
その後、actionを定義します.この例では、私達は一つの動作しかないです.input値を修正します.オンChangeという名前をactionに付けて、一つのパラメータeに入力して、typeとvalue値を含む対象を返します.最後にモジュールを暴露します.
actionを定義した後、私達は自然にこのactionを処理します.次のステップはreducerを作成します.
reducerは2つのパラメータを受信し、新しいstateに戻り、最初のパラメータstateは初期値を設定してからundefinedに戻り、第2のパラメータactionは、受信可能なactionパラメータを受信する.
stateに設置されているcomponentで使用して、ビューに表示されるprops値を結びつけるということは、以前に定義されていたstrとplacholderです.
reducer内部では、switchでactionのtypeを検出し、それぞれのtypeに基づいて対応するactionを処理する必要があります.
注意しなければならないのは、defaultの場合にstateに戻ることを覚えておかないと、マッチングしていないaction.typeがあれば、stateは失われます.
私たちはreducerがstore内に存在することを知っています.actionとreducerが全部配置された以上、次はstoreの番です.
reduxでcreateStoreモジュールと以前に定義されたreducerを導入して、storeを作成します.
処理が完了したらまたcomponentに戻ります.
このように、私達はstoreのstateとdispatchをそれぞれcomponentに結び付けて、storeの中のstateとcomponentの中のpropsの連絡を通すだけでいいです.react-reduxから提供されるconnectとProviderだけが必要です.
関連モジュールをインポート:
最後に、このコンポーネントをApp.jsに導入すればいいです.
このデモの機能はinputタグに内容を入力し、上に表示されているpタグに同期して表示します.DEMOは簡単です.
プロジェクトコードはここです.https://github.com/oliyg/redu...
clone:https://github.com/oliyg/redu...
余計なことを言わない
最初に上の図:
/*
_________ ____________ ___________
| | | | | |
| Action |------------▶| Dispatcher |------------▶| callbacks |
|_________| |____________| |___________|
▲ |
| |
| |
_________ ____|_____ ____▼____
| |◀----| Action | | |
| Web API | | Creators | | Store |
|_________|----▶|__________| |_________|
▲ |
| |
____|________ ____________ ____▼____
| User | | React | | Change |
| interactions |◀--------| Views |◀-------------| events |
|______________| |___________| |_________|
*/
:[redux-tutorial](https://github.com/happypoulp/redux-tutorial/blob/master/00_introduction.js)
上の図はみんながもっと熟知しているreduxデータフローです.この図からコードを打てばいいです.component( UI) -> action( ) -> reducer( action ) -> store( reducer state dispatch) -> component( connect component、 Provider UI) -> ...
ここでcreat-react-apを使ってインストールしてstartしました.無駄なファイルを整理して、自分達のファイルを追加します.ファイルディレクトリは以下の通りです.
src
component/
Texture.js
action/
action.js
reducer/
reducer.js
store/
store.js
App.js
はい、カタログファイルは大体このようにして、正式にコードを押し始めます.私の位置:component/Texture.js
まずcomponentから切ります.
必要な依存性を取り入れる:
import React from 'react';
componentを作成しました.const Texture = (props) => (
{props.str}
);
私の位置action/action.jsその後、actionを定義します.この例では、私達は一つの動作しかないです.input値を修正します.オンChangeという名前をactionに付けて、一つのパラメータeに入力して、typeとvalue値を含む対象を返します.最後にモジュールを暴露します.
const onChangeAction = (e) => (
{
type: 'INPUTCHANGE',
value: e.target.value
}
);
export default onChangeAction;
私のポジションreducer/reducer.jsactionを定義した後、私達は自然にこのactionを処理します.次のステップはreducerを作成します.
reducerは2つのパラメータを受信し、新しいstateに戻り、最初のパラメータstateは初期値を設定してからundefinedに戻り、第2のパラメータactionは、受信可能なactionパラメータを受信する.
stateに設置されているcomponentで使用して、ビューに表示されるprops値を結びつけるということは、以前に定義されていたstrとplacholderです.
reducer内部では、switchでactionのtypeを検出し、それぞれのtypeに基づいて対応するactionを処理する必要があります.
注意しなければならないのは、defaultの場合にstateに戻ることを覚えておかないと、マッチングしていないaction.typeがあれば、stateは失われます.
const reducer = (state = { str: '✒️write something: ', placeholder: 'here?' }, action) => {
switch (action.type) {
case 'INPUTCHANGE':
return {
str: action.value
};
default:
return state;
}
};
export default reducer;
私の位置:store/store.js私たちはreducerがstore内に存在することを知っています.actionとreducerが全部配置された以上、次はstoreの番です.
reduxでcreateStoreモジュールと以前に定義されたreducerを導入して、storeを作成します.
import { createStore } from 'redux';
import reducer from '../reducer/reducer';
const store = createStore(reducer);
export default store;
私の位置:component/Texture.js処理が完了したらまたcomponentに戻ります.
このように、私達はstoreのstateとdispatchをそれぞれcomponentに結び付けて、storeの中のstateとcomponentの中のpropsの連絡を通すだけでいいです.react-reduxから提供されるconnectとProviderだけが必要です.
関連モジュールをインポート:
import { Provider, connect } from 'react-redux';
import store from '../store/store';
import onChangeAction from '../action/action';
mapStateToPropsとmapDisplatToPropsの2つの関数を作成します.const mapStateToProps = (state) => {
return ({
str: state.str,
placeholder: state.placeholder
});
};
const mapDispatchToProps = (dispatch) => {
return ({
onChange: (e) => { return dispatch(onChangeAction(e)) }
});
};
そしてこの2つの商品とstoreをconnectとProviderを通してビューに結び付けます.const TextureConnect = connect(mapStateToProps, mapDispatchToProps)(Texture);
const TextureWrapper = () => (
);
export default TextureWrapper;
私の位置:App.js最後に、このコンポーネントをApp.jsに導入すればいいです.
//requirement
import React from 'react';
import TextureWrapper from './component/Texture';
const App = () => (
);
export default App;
また、component/Texture.jsの中でビューの部分は単独で出てきたほうがいいです.新しいフォルダviewディレクトリの下に置いて、TextureContiner.jsという名前で引用して、他のロジック部分を後者に置きます.