2016-10-31 10 views
0

私はReactで常にあなたの状態を不変に保ちたいと思います。私のアレイが私のReducerで突然変異している理由を理解できません

多分私の状態と不変性の私のログインにいくつかの欠陥があります。私が間違っている場合は私を修正しますが、州のオブジェクトの中核は減速家の権利で管理されますか?例えば、stateusersをリストにしたいのであれば、それを配列に整形したいと思うでしょう。

したがって、inititalState = []と設定しました。ここで私は私が困惑していると信じています。私はこれを正しく理解しているのか、私は考えていないのか分かりません。

以前私がやっていた、

case GET_USERS: 
    return [...state, 
    Object.assign({}, action.payload) 
    ]; 

しかし、私はそれが私が変異していたオブジェクトまたはキーではありません考慮return [...state, ...action.payload];にそれを変更することをお勧めしました。今私は、return [...state, ...action.payload];がを置き換えて、action.payload,であると仮定しますが、すべてではありません。

私がしようとするユーザーをフィルタするたびに...それは単に変異しthis.props.usersにユーザーオブジェクトをプッシュし、私はReduxのドキュメントを追跡するために私の最善をしようとしていますので、どのようにについて混乱しています。

+1

あなたのフィルタリングユーザーについては言及していますが、コードには '.filter()'が表示されません。 –

+0

フィルタについては、単に検索クエリを使用しています。これはほんの一例ですが、私が努力しているのはこのようなものです。 'this.getUsers(searchQuery){this.props.getUsers(searchQuery).bind(this))}'。そして、私がしているのは、単純に 'this.props.users.map(....' – dsomel21

+0

)をマッピングすることです。フィルタリングに関して既に試した内容を見ずに問題を特定することは非常に困難です。あなたの 'GET_USERS'レデューサーは' [... state、... action.payload] 'を返します。アクションが呼び出されるたびに' action.payload'を 'state'に追加し続けます。あなたのコード。 –

答えて

0

これは、...stateusersのリストがあるために発生します。次回の呼び出しでは、新しいユーザーをstateに追加するだけです。 Intead、あなたは​​を返すべきです。

以下を試してください。

case GET_USERS: 
    return [...action.payload]; 
+0

私は何かを愚かなコピーと貼り付けのようにしたに違いないすべての方法を考えることなく、減速機。毎回更新された状態の新しいコピーを返す場合は、 '(... state、... updatedState)'のようなものがどうして存在するのでしょうか?それはそれを変更可能にしませんか? – dsomel21

+0

'[... state、... updatedState]'を実行できます。 [babel repl](https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=true&presets=latest&code=const%20a%20%3D%20%5B1%2C2%2C3%5D%0Aconst%20b%)を確認してください。 20%3D%20%5B4%2C5%2C6%5D%0Aconst%20c%20%3D%20%5B ...%2C%20 ... b%5D%0Aconsole.log(c)) –

関連する問題