Javascript 不可变更新函数不工作
我正在使用immutable.js函数update()和updateIn()。但结果并不像预期的那样Javascript 不可变更新函数不工作,javascript,immutable.js,Javascript,Immutable.js,我正在使用immutable.js函数update()和updateIn()。但结果并不像预期的那样 const initialState = Immutable.fromJS({cartList: [ { id: 1, name: "Product One", quantity:1 },{ id: 2, name: "Product Two",
const initialState = Immutable.fromJS({cartList: [
{
id: 1,
name: "Product One",
quantity:1
},{
id: 2,
name: "Product Two",
quantity:2
}],
productList:[{
name: "Product One",
id: 1,
availability:2
},{
name: "Product Two",
id: 2,
availability:2
},{
name: "Product Three",
id: 3,
availability:4
}]});
var action = {
id: 2,
name: "Product Two",
quantity:2
};
initialState = initialState.updateIn(['cartList'], cartList => cartList.push(action)).toJS();
initialState = initialState.updateIn(['productList'], productList => {
productList.map(product => {
if(action.id == product.get("id")){
return product.update("availability", value => value-1);
} else
return product
});
}).toJS();
console.log(initialState.toJS());
我试过了。但初始状态没有变化
提前感谢。您已经声明了
initialState
const
,这意味着您无法更改该变量所持有的值(它是一个变量,尽管它无法更改)。所以
不会更新initialState
中的值
如果需要,请将const
更改为var
或let
关于productList
:注意Array#map
返回新数组,它不会修改现有数组。所以你可能想要:
productList = productList.map(/*...*/);
您可能知道这一点,但我还是要标记它:
const
是自ES2015(ES6)以来JavaScript的一个新特性。它在最新的引擎(如V8)中得到支持(在Chrome和NodeJS中),但很多浏览器还没有它(要么是因为他们还没有它,要么是因为人们正在使用在规范最终确定之前发布的旧版本)。如果你不想使用ES2015功能,您需要的是var
而不是let
(因为let
也是新的)。即使将initialState
更改为var或let,在map函数之后productList也将不被定义。你能帮我吗???@AmalaJames:如果代码以合理、一致的方式缩进/格式化,那会有所帮助。你可以在你自己的代码中使用任何你想要的东西,但是当你寻求帮助时,让别人能读懂代码是很有用的。@AmalaJames:不过我已经更新了答案。您没有使用map
的返回值。克劳德:谢谢。我错过了返回类型。
productList = productList.map(/*...*/);