私はReact/Reduxで新しいです。私はreduxの状態を更新するためのより良いアプローチは何かを理解するのを助けますか? 多くのケースでは、私の減速機や多くの場合、状態を管理することができます。リアクションコンポーネントで状態を管理し、1つのアクションだけを呼び出して状態を更新することができます。reduxで状態を更新する方が良い方法はありますか?
// Option #1
const reducer = (state = {items: [], counter: 0, someAnotherData: {}}, action) => {
switch (action.type) {
case ADD_ITEM: {
const updatedItems = state.items.concat(action.payload);
return Object.assign({}, state, {items: updatedItems});
}
case REMOVE_ITEM: {
const updatedItems = state.items.filter(e => e.id !== action.payload);
return Object.assign({}, state, {items: updatedItems});
}
}
// cases for counter and someAnotherData
};
// component
render() {
// ...
<Button onClick={() => dispatch({type: 'ADD_ITEM', payload: item})}>
Add
</Button>
<Button onClick={() => dispatch({type: 'REMOVE_ITEM', payload: id})}>
Remove
</Button>
{...}
}
// Option #2
const reducer = (state = {items: [], counter: 0, someAnotherData: {}}, action) => {
switch (action.type) {
case 'UPDATE_DATA':
return Object.assign({}, state, action.payload);
// no more cases
default:
return state;
}
};
// component
addItem = (item) => {
const updatedItems = this.props.items.concat(item);
this.props.dispatch({type: 'UPDATE_DATA', payload: {items: updatedItems}});
}
removeItem = (id) => {
const updatedItems = this.props.items.filter(e => e.id !== id);
this.props.dispatch({type: 'UPDATE_DATA', payload: {items: updatedItems}});
}
render() {
// ...
<Button onClick={() => this.addItem(item)}>
ADD
</Button>
<Button onClick={() => this.removeItem(id)}>
REMOVE
</Button>
{...}
}
私の場合、#2の方が同じファイルで何が起こっているかを見ることができますが、これは正しい方法であるかどうかはわかりません。
次のようにあなたがより良いActionCreators
を使用する必要があります
返信いただきありがとうございます。私は私の問題をよりよく説明しなければならない。私は/ etcデータを追加/削除するロジックをどこにすればよいのですか:減速器や反応コンポーネントでですか? 2番目のオプションでは、1つのアクション "UPDATE_DATA"(ActionCreatorsで同じことができます)と反応コンポーネント内のデータの追加/削除のみを処理しています。このアプローチに落とし穴がありますか? –
複数の場所で同じロジックを再利用したい場合があるので、反応コンポーネントではなく、リデューサーのストア内容を操作する必要があります。それゆえ、それをコンポーネントから独立させておく方が良い。 –