Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 如何更改嵌套对象而不在Redux中对其进行变异_Javascript_Object_Redux - Fatal编程技术网

Javascript 如何更改嵌套对象而不在Redux中对其进行变异

Javascript 如何更改嵌套对象而不在Redux中对其进行变异,javascript,object,redux,Javascript,Object,Redux,我是redux的新手。我有点困惑如何在不改变数据的情况下改变数据 我的数据结构是这样的 { postOwnwerName:"", postTags:[], photos:[ { id:dc5c5d7c5s, caption:null }, { id:dccccccc5s,

我是redux的新手。我有点困惑如何在不改变数据的情况下改变数据

我的数据结构是这样的

    {
      postOwnwerName:"",
        postTags:[],
        photos:[

          {  
            id:dc5c5d7c5s,
            caption:null


            },
             {  
            id:dccccccc5s,
            caption:null


            }





        ],
   }
此函数何时启动

this.props.updateOption(id,标题)

我的Reducer应该根据数据结构中的id设置数据,而不会对其进行修改

import * as types from '../Actions/actionTypes';

const initialState = {
    postOwnwerName:"",
    postTags:[],
    photos:[],
};

export default function uploadReducer(state=initialState,action) {
    switch (action.type){
        case types.SETPHOTOSTATE:
            return Object.assign({},state,{ photos:state.photos.concat(action.payload) });
        case types.SETCAPTIONTEXT:

     //this method is not working
            return (
                Object.assign({},state,state.photos.map((data) => {
                    if(data.id == action.payload.id){
                        return Object.assign({},data,{caption:action.payload.caption})
                    }else{
                        return data
                    }
                }))
            )
        default:
            return state
    }
}

如果state对象具有多个级别,则很难在不发生变化的情况下更改状态。在这些场景中,我首先深入复制状态,然后对新状态进行更改并返回新状态。看这里。你可以试试这个

export default function uploadReducer(state=initialState,action) {
  let newState = JSON.parse(JSON.stringify(state));
  switch (action.type){
    case types.SETPHOTOSTATE:
       newState.photos.push(action.payload);
       return newState;
    case types.SETCAPTIONTEXT:
       newState.photos.map((data) => {
         if(data.id == action.payload.id){
           data.caption = action.payload.caption;
         }
       });
       return newState;
   default:
     return newState;
   }
}

Thx bro好吧,我想问一个建议,weather Object.assign很好,或者任何库都会更好。如果您使用es6,您可以使用扩展运算符作为Object.assign的替代。我没有使用任何库来替换Object.assign。对不起,我不知道这个库。您可能还想阅读Redux文档中关于的部分。