React Redux Connect MapState不会针对集合中的过滤项进行更新

时间:2019-07-18 09:23:44

标签: javascript reactjs redux react-redux

当我尝试订阅商店中某个集合中特定商品的更改时,我想我误会了一些东西,或者做的是严重错误的事情。除非添加直接列表订阅,否则我的组件将不会收到更新。

以下作品:

const mapStateToProps = (state, props) => ({
  list: state.podcasts.items,
  getItem: props.id
    ? state.podcasts.items.filter(item => item.clientId === props.id)[0] || {}
    : {},
});

如果我删除列表项,则只会收到我订阅的收藏项的初始状态。

我如何在化简器中更新列表:

PODCAST_GRADIENT_UPDATED: (state, { payload }) => ({
    ...state,
    items: state.items.map(item => {
      if (item.clientId === payload.clientId) {
        item.gradient = payload.gradient; // eslint-disable-line
      }
      return item;
    }),
  }),
  • 如果没有列表订阅,以上方法是否可以工作?
  • 如果没有,应该怎么做?

1 个答案:

答案 0 :(得分:0)

这是一个菜鸟错误,因为上面的示例中存在一些状态突变。通过以下方式更改我在reducer中的功能可以解决此问题:

PODCAST_GRADIENT_UPDATED: (state, { payload }) => ({
    ...state,
    items: state.items.map(item => {
      if (item.clientId === payload.clientId) {
        return { ...item, gradient: payload.gradient };
      }
      return { ...item };
    }),
  }),

特别注意使用散布运算符来创建和返回新项目。