2016-06-27 30 views
1

我減速終極版和Immutable.js - 從JSON

var initialState = Map({ 
status: true 
}); 
function user(state = initialState, action) { 
switch (action.type) { 
    case GET_PROFILE: 
    return state.set(fromJS(action.response)) 
    } 
    }) 

API集狀態返回JSON - >action.response

{ 

    "id": 11, 
    "profileImage": "http://www.surfertoday.com/images/stories/addictivesurfing.jpg" 

} 

問題:fromJS設置,而不是一個新的Map對象,將數據添加到現有Map。我試圖做一些像 return state.set(Array(fromJS(action.response)))這不起作用。


我該如何解決這個問題?或者我不應該使用Immutable.js?

+0

使用'merge',而不是'set' – user6227254

回答

1

嗯,從技術上講,你確實希望它返回一個新的地圖,因爲redux/immutable的要點是你要用你的更改返回一個新的狀態對象,而不是改變現有的對象。

很難說爲什麼這不適合你,因爲我不確定你想要做什麼。我認爲案例「GET_PROFILE」可能可以重新命名爲更具體的東西?

這個例子並不是完美的,但可以給你一些啓示:https://github.com/rogic89/ToDo-react-redux-immutable/blob/master/src/reducers/todos.js

如果您發佈更多信息或添加更多的代碼我可能能夠提供更深入的瞭解。

0

您可能試圖做的是更新從某種請求中檢索到的新值的狀態。

您在減速器中編寫的動作並未使用新值更新存儲器。

Immutable.js Map/set函數需要兩個參數鍵和一個您只提供鍵的值。

Immutable.js Map/merge改爲使用合併,將商店的狀態與響應中的數據組合在一起。

var initialState = Map({ 
    status: true 
}); 

function user(state = initialState, action) { 
    switch (action.type) { 
    case GET_PROFILE: 
    return state.merge(fromJS(action.response)) 
    } 
}) 

你會得到

{ 
    status: true, 
    id: 11, 
    profileImage: "http://www.surfertoday.com/images/stories/addictivesurfing.jpg" 
}