2016-10-31 19 views
0

我明白在React中,您希望始終保持您的狀態不可變。無法理解爲什麼我的數組在我的Reducer中發生變異

也許我的登錄狀態和不變性有一些缺陷。糾正我,如果我錯了,但國家的對象的核心是在減速機的權利?意思是說,如果我想讓我的stateusers(例如)成爲一個列表...我想將它塑造成一個數組。因此,我設定了我的inititalState = []。這是我相信我難過的地方。我不知道我是否正確理解這一點,或者我沒有想到。

以前我在做什麼,

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

但我被告知將其更改爲return [...state, ...action.payload];考慮到這不是一個對象或鑰匙我變異。現在我想,return [...state, ...action.payload];正在取代state,與action.payload,但這不是所有情況下

每次我嘗試和過濾用戶...它只是變異推動用戶對象this.props.users,我感到困惑如何,因爲我想我最好遵循終極版文檔。

+1

你提到過濾用戶,但是你的代碼沒有顯示'.filter()'你能不能發表相關的代碼? –

+0

對於過濾器,我只是使用搜索查詢。這只是一個例子,但我爭取的是這樣的。 'this.getUsers(searchQuery){this.props.getUsers(searchQuery).bind(this))}'。然後,我所做的只是簡單地映射'this.props.users.map(....' – dsomel21

+0

)要確定你遇到的問題很困難,而沒有看到你已經在過濾方面嘗試了什麼。你的'GET_USERS' reducer只是返回'[... state,... action.payload]',那麼每次調用action時它都會繼續追加'action.payload'到'state'。你的代碼 –

回答

0

發生這種情況是因爲...state將有您的users列表。在下次通話中,您只需將新用戶添加到state。 Intead,你應該返回​​。

請嘗試以下操作。

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

是啊我做了一些愚蠢的事情,比如複製和粘貼一個simil ar減速器沒有一直思考。如果我們想每次都返回更新狀態的新副本,那麼怎麼會有'(... 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))的 –

相關問題