Redux - получить исходное состояние от бэкэнда - какой правильный способ сделать это? - PullRequest
1 голос
/ 12 мая 2019

Я хотел бы получить некоторые переменные из бэкэнда (т.е. showTutorial) для начального состояния в редукторе.

Я думал об использовании только вызова в axios от редуктора, но я не уверен, чтоэто лучший способ сделать это.

Вот как это делается прямо сейчас:

import { UNSET_TUTORIAL, SET_FILTER_BLOCKS } from "../actions/types";


const initialState = {
  showTutorial: true, // <-- instead of initializying to true, do the axios call
  filterBlocks: "ALL"
};

export default (state = initialState, action) => {
  switch (action.type) {
    case UNSET_TUTORIAL:
          return { ...state, showTutorial: false };

    case SET_FILTER_BLOCKS:
      return { ...state, filterBlocks: action.payload };
    default:
      return state;
  }
};

Я не хочу использовать redux-persist, как я хотел бы сначала понять,правильный способ сделать это.

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Нет разницы между тем, как вы это делаете, и тем, как вы обновляете состояние из бэкэнда для любого другого компонента.

У вас должно быть действие, запущенное для компонента приложения верхнего уровня (или любого компонента, созданного при запуске приложения), который загружает данные из серверной части и отправляет действие с результатами из серверной части.Затем ваш редуктор обновляет состояние на основе этого действия.

Запуск действия над компонентом приложения верхнего уровня можно выполнить с помощью события жизненного цикла, когда компонент монтируется, обычно getDerivedStateFromProps()

1 голос
/ 12 мая 2019

Лучший способ сделать это - вызвать соответствующее действие из App.js и выполнить «загрузку», пока данные не будут правильно извлечены.Очевидно, что в случае ошибки вы не будете продолжать визуализировать компоненты, а отобразите сообщение об ошибке.

Редукторы никогда не должны вызывать действия, это нарушает поток избыточности.

...