React Router Redirect не перенаправляет

Я пытаюсь перенаправить с этой страницы после отправки формы. Почему-то ничего не делает. Я не получаю ошибку, и страница остается прежней. Я использую реактивный маршрутизатор 4. Что мне здесь не хватает?

handleSubmit(event) {
  event.preventDefault();

  if (isObjectEmpty(errorsInForm)) {
    Meteor.call(
      'user.multiplechoice.answer',
      conductedExamId,
      (err, res) => {
        if (err) {
          alert(err.reason);
        } else {
          <Redirect to = "/test" />;
        }
      }
    );
  }
}

вместо использования <Redirect /> попробуйте использовать `this.props.history.push('/test') '

Max Svid 15.05.2019 08:23

Вы должны возвращать <Redirect /> внутри метода рендеринга. Внутри методов вы можете использовать историю из реквизита для отправки.

tarzen chugh 15.05.2019 08:29

@tarzenchug чувак, большое тебе спасибо! Я столкнулся с этой проблемой в течение недели. И вы объясняете, что я не нашел раньше. Еще раз спасибо

Luiz Palte 27.07.2021 17:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
3
1 580
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

<Redirect /> — это компонент, который должен возвращаться функцией render, а не обработчиком событий. Если вы хотите использовать компонент Redirect, вы должны установить состояние при успешном вызове API и визуализировать компонент на основе этого состояния.

state = {
    formSuccess: false
}

handleSubmit(event) {
    /* Call to api was successful */
    this.setState({ formSuccess: true });
}

render() {
    if (this.state.formSuccess) {
        return (<Redirect to = "/test" />);
    }

    /* The rest of your render function */
}

Если вы не хотите использовать компонент Redirect и просто хотите перенаправить, у вас должен быть доступ к истории вашего компонента Router. Вы делаете это, обертывая свой компонент, который имеет функцию handleSubmit, с withRouter HOC, чтобы предоставить ему доступ к истории.

import { withRouter } from "react-router";

class MyAwesomeFormComponent {
    handleSubmit() {
        /* Call to api was successful */
        this.props.history.push("/test");
    }
}

export default withRouter(MyAwesomeFormComponent);

Сначала используйте компонент более высокого порядка с маршрутизатором из react-router-dom ''' Затем используйте this.props.history.push («маршрут-путь»); '''

Другие вопросы по теме