React Native Redux中的不可变action.payload

时间:2019-06-21 23:34:33

标签: 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。因此,在这种情况下,它将违反“不变的减速器”原理。

请告诉我在这种情况下是否可以违反“不变的减速器”原则。而且,如果违反,我该怎么办? 预先谢谢你

1 个答案:

答案 0 :(得分:0)

不是。由于您只是将products设置为action.products,这是来自fetch的全新对象。

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