Как очистить местное государство после отправки успешных действий в саге редуксов? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь очистить состояние моего компонента после успешного вызова в Redx Saga. Как мне это сделать?

Я пытаюсь использовать состояние компонента для моего входного значения

this.state = {
    department: '',
};

Мое текущее решение выглядит так:

add(department).then(action => {
    if(action.type.endsWith('SUCCESS')) {
       this.setState({department: ''})
    }
})

Я пытаюсь очистить свой ввод после успешного вызова в саге.

1 Ответ

0 голосов
/ 09 мая 2019

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

Если вы хотите избежать добавления чего-либо в магазин, я могу подумать о другой возможности, хотя и немного более сложной: вы можете создать обещание и передатьего разрешение и отклонение методов как часть действия, которое вы отправляете.Тогда в саге он мог призвать тех, кто решил обещание.Например:

export function* addDepartment(action) {
  const { department, resolve, reject } = action;
  try {
    // do something async with department
    resolve();
  } catch (ex) {
    reject(ex);
  }
}

Для использования в mapDispatchToProps компонента, например:

const mapDispatchToProps = (dispatch) => ({
  add: (department) => {
    return new Promise((resolve, reject) => {
      dispatch({ type: 'ADD', department, resolve, reject });
    });
  }
});

... и в самом компоненте, например:

this.props.add('some department')
  .then(() => this.setState({ department: '' })
  .catch((err) => console.log('an error occurred', err));
...