Приложение Redux Connected Response - как мне НЕ рендерить его, пока мой побочный эффект не закончится? - PullRequest
0 голосов
/ 25 ноября 2018

React 16.3 Redux 3.7.2

В componentDidMount я вызываю действие, которое заполняет реквизит (mapDispatchToProps) через побочный эффект (AJAX).

Моя проблема в том, что он повторно используетстарый реквизит от redux - сначала визуализируйте его, а затем повторно выполните, как только обновление поступит через mapDispatchToProps.

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

В документации говорится, что компонент уничтожен при размонтировании, но это не так, потому что это различие в состоянии, когда вы переходите на эту страницу или вы находитесь наи перезагрузите страницу.

Поскольку при перезагрузке нет данных, поэтому страница ДОЛЖНА ждать завершения побочного эффекта.

К сожалению, я не могу предоставить вам пример кода - нолюбой, кто подвергся этому странному поведению, должен признать мое описание ....

1 Ответ

0 голосов
/ 25 ноября 2018

Ваш компонент, вероятно, выполняет повторный рендеринг со "старым" состоянием, потому что это состояние, которое вы сохранили в прижиме и передаете компоненту .

Что вы можете сделатьвызывает триггерное действие в componentWillUnmount, которое разрушает это состояние.

EG (псевдопсевдокод):

Редуктор:

const initialState = { counter: 0 };

const myReducer = (state = initialState, action) => {
  switch(action.type) {
    case 'DO_SOMETHING':
      return {
        ...state,
        counter: state.counter + 1
      };

    case 'CLEAN_STATE':
      return initialState;
  }
}

Компонент:

class MyComponent extends React.Component {
  render () {
    return (
      <div>
        <span>{this.props.counter}</span>
        <button onClick={triggerActionThatCausesDO_SOMETHING} />
      </div>
    );
  }

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