Неизменный action.payload в React Native Redux - PullRequest
2 голосов
/ 22 июня 2019

Я получаю список продуктов с сервера в моем 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());
      });
  };
}

Я написал этот случай в своем редукторе:

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

Моя проблема в том, что я не могу понять, что полезная нагрузка action.products нарушаетпринцип «неизменный редуктор» или нет.Я не уверен, что мои response.data не могут быть обновлены нигде, кроме моего редуктора.Таким образом, это нарушит принцип «неизменяемого редуктора» в этом случае.

Пожалуйста, скажите, могу ли я нарушить принцип «неизменяемого редуктора» или нет в этом случае.И, если это нарушает, как я должен делать?Заранее спасибо)

1 Ответ

0 голосов
/ 22 июня 2019

Это не так. Так как вы просто устанавливаете products на action.products, который является совершенно новым объектом, который приходит от fetch.

Это могло бы произойти, если бы вы обновляли избыточное состояние непосредственно в любом месте вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...