javascript - React Native Redux 中不可变的 action.payload

标签 javascript reactjs react-native redux

我在 RN 应用程序中从服务器获取产品列表。它是一个对象数组:

[{
    "id": 1, 
    "title": "product1", 
    "img": "img1.png", 
    "text": "lorem ipsum 1"
}, 
{
    "id": 2, 
    "title": "product2", 
    "img": "img2.png", 
    "text": "lorem ipsum 2"
}]

我以这种方式获取数据:

export function fetchProducts() {
  return (dispatch: Function) => {
    return apiClient
      .get("products/")
      .then(response => {
        dispatch(fetchProductsSuccess(response.data));
      })
      .catch(error => {
        showErrorMessage(FETCH_CATALOGUE_FAIL_MESSAGE);
        dispatch(fetchProductsFail());
      });
  };
}

我在我的 Reducer 中写了这个案例:

case FETCH_PRODUCTS_SUCCESS:
  return {
    ...state,
    appState: {
      ...state.appState,
      isCommentsLoadingFinished: true
    },
    domainData: { ...state.domainData, products: action.products }
  };

我的问题是我无法理解 action.products 负载是否违反了“不可变 reducer ”原则。我不确定我的 response.data 不能在我的 reducer 以外的任何地方更新。因此,在这种情况下,它将违反“不可变 reducer ”原则。

请告诉我在这种情况下我是否可以违反“不可变 reducer ”原则。而且,如果违反了,我该怎么办? 提前谢谢你)

最佳答案

事实并非如此。由于您只是将 products 设置为 action.products,这是一个来自 fetch 的全新对象。

如果您直接在应用程序的任何位置更新 redux 状态,就会发生这种情况。

关于javascript - React Native Redux 中不可变的 action.payload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711480/

相关文章:

javascript - 如何将当前页面(ng-grid)保存在父状态?

javascript - 是否可以防止使用 XHR 加载页面?

javascript - Javascript 中的字符串比较失败

css - 如何在 React 中为条件元素设置动画

javascript - window.open() 在添加到主屏幕的移动 Safari 网络应用程序中不起作用

javascript - React 使用状态来显示,否则隐藏

reactjs - 改变 React 数组状态比克隆它更好/更快的方法?

react-native - React Native Debug模式抛出错误,为什么会这样?

react-native - 是否真的可以通过与 Expo 一起运行的 React Native 应用程序通过 Detox/Jest 测试?

reactjs - 使用 React Native 应用程序实现强制更新