как сделать history.pu sh на другой странице после отправки успешного действия регистрации в redux-thunk - PullRequest
0 голосов
/ 14 апреля 2020

Я недавно использую redux-thunk и встречаю такой случай:

В функции создателя действий при регистрации я хочу сделать history.push после отправки действия при успешной регистрации код может выглядеть следующим образом:

// SignupAction.js

export const signupRequest = (userData) => {
  return dispatch => {
    dispatch(signupPending())

    return axios.post('/api/user', userData)
      .then(res => dispatch(signupSuccess()))
      .then(() => {
        // wanna do history.push('/') to the home page after successfully signup
      })
      .catch(error => dispatch(signupFailure(error.message)))
  }
}

Сейчас я в замешательстве, я пытаюсь объединить все логи c в одно действие, но нет способа ввести history в мое действие регистрации. Я могу дать signupRequest функции второй аргумент, это может быть сам объект history: signupRequest(userData, history), или я могу просто передать обратный вызов: signupRequest(userData, callback). Однако я не уверен, какой из них лучше.

Существует также альтернативный способ получить историю, мне не нужно помещать все логи c в одно действие, поэтому signup action просто вернет обещание, и я буду разбираться с ним позже в компоненте, в этом случае доступ к history будет довольно простым:

// signupAction.js

export const signupRequest = (userData) => {
  return dispatch => {
    return axios.post('/api/users', userData);
  }
}

// signupForm.js
export default class SignupForm extends Component {
  // ...
  handleSubmit = e => {
    const userData = e.target.value
    this.props.signupRequest(userData)
      .then(() => this.props.dispatch(signupSuccess()))
      .then(() => {
        // now i can easily access history inside the component
        this.props.history.push('/')
      })
      .catch(error => dispatch(signupFailure(error.message)))  }
}

Итак, по какому пути я должен следовать, и есть ли лучшая практика решить эту проблему?

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