Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Reactjs 使用react的redux,为什么提取新数据会删除我以前状态的一部分?_Reactjs_React Native_Redux_React Redux - Fatal编程技术网

Reactjs 使用react的redux,为什么提取新数据会删除我以前状态的一部分?

Reactjs 使用react的redux,为什么提取新数据会删除我以前状态的一部分?,reactjs,react-native,redux,react-redux,Reactjs,React Native,Redux,React Redux,我有多个请求一个接一个地发生,我用操作和减缩器处理它们,但其中一些似乎在完成时删除了我状态的元素 有人能给我解释一下为什么会这样吗 这是我的减速机: ... case FETCH_BLOG: return { ...state, blogs: action.payload.data }; case FETCH_ITEM_LIST: return { ...state.item, done: true, popular: [ ...state.popular

我有多个请求一个接一个地发生,我用操作和减缩器处理它们,但其中一些似乎在完成时删除了我状态的元素

有人能给我解释一下为什么会这样吗

这是我的减速机:

...
    case FETCH_BLOG:
      return { ...state, blogs: action.payload.data };
    case FETCH_ITEM_LIST:
      return { ...state.item, done: true, popular: [ ...state.popular ], nearby: [ ...state.nearby ], item: { ...state.item }, second_item: { ...state.second_item }, items: action.payload.data.item , new_item: action.payload.data.new_item, item_places: action.payload.data.item_places, stories: action.payload.data.stories };
    case FETCH_ITEM_NEARBY:
      return { ...state, nearby: action.payload.data.nearby, loading: false, count: action.payload.data.count, done: true };
    case FETCH_ITEM_NEARBY_START:
      return { ...state, loading: true };
    case FETCH_ITEM_POPULAR:
      return { ...state, popular: action.payload.data.popular };
...
我原以为使用…state会保留以前的状态,只向其中添加元素,但它似乎会以某种方式覆盖它

我按照这个顺序调用我的操作,我可以看到在一些操作完成后,我先前状态的一部分被删除

    this.props.itemNearbyFetch();
    this.props.itemPopularFetch();
    this.props.itemListFetch();
    this.props.blogFetch();

FETCH\u ITEM\u列表
操作中,您只是将项目分散到状态中,这将去除状态对象的任何属性,并替换为
项目
具有的任何属性。我认为您误解了spread运算符的工作方式

你想做的是

case FETCH_ITEM_LIST:
  return { ...state, 
       done: true, 
       items: action.payload.data.items, 
       new_item: action.payload.data.new_item, 
       item_places: action.payload.data.item_places, 
       stories: action.payload.data.stories 
  };
在上一个示例中,您现在可以复制以前处于状态的任何内容,如
popular
附近的
有效负载数据中的故事、项目和项目位置


item:{…state.item}
是多余的,因为当你做
{…state,…}

哦,我没有注意到我用的是…state.item,而不是简单的…state。修好了,谢谢你指出!