Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不可变更新函数不工作_Javascript_Immutable.js - Fatal编程技术网

Javascript 不可变更新函数不工作

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",

我正在使用immutable.js函数update()和updateIn()。但结果并不像预期的那样

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(/*...*/);