Я создал большое приложение, в котором одна кнопка на панели навигации открывает модал.
Я отслеживаю состояние modalOpen, используя контекстный API.
Итак, пользователь нажимает кнопку на панели навигации.Модал Открывается.Модал имеет контейнер с именем QuoteCalculator.
QuoteCalculator выглядит следующим образом:
class QuoteCalculator extends React.Component {
static contextType = ModalContext;
// ...
onSubmit = () => {
// ...
this.context.toggleModal();
this.props.history.push('/quote');
// ..
};
render() {
//...
return(<Question {...props} next={this.onSubmit} />;)
}
}
export default withRouter(QuoteCalculator);
Теперь все работает как положено.Когда пользователь отправляет, я иду по правильному маршруту.Я просто вижу следующее предупреждение на консоли
index.js: 1446 Предупреждение: withRouter (QuoteCalculator): Компоненты функций не поддерживают contextType.
Я испытываю искушениеигнорировать предупреждение, но я не думаю, что это хорошая идея.
Я попытался использовать Redirect в качестве альтернативы.Что-то вроде
QuoteCalculator looks as follows:
class QuoteCalculator extends React.Component {
static contextType = ModalContext;
// ...
onSubmit = () => {
// ...
this.context.toggleModal();
this.setState({done: true});
// ..
};
render() {
let toDisplay;
if(this.state.done) {
toDisplay = <Redirect to="/quote"/>
} else {
toDipslay = <Question {...props} next={this.onSubmit} />;
}
return(<>{toDisplay}</>)
}
}
export default QuoteCalculator;
Проблема с этим подходом заключается в том, что я продолжал получать сообщение об ошибке
Вы пытались перенаправить на тот же маршрут, на котором вы сейчас находитесь
Кроме того, я бы предпочел не использовать этот подход, просто потому, что тогда мне пришлось бы отменить состояние «сделано» (в противном случае, когда пользователь снова нажимает кнопку «Готово», значение «истина», и мы просто будем перенаправлены)...
Есть идеи, что происходит сRouter и history.push?
Вот мое приложение
class App extends Component {
render() {
return (
<Layout>
<Switch>
<Route path="/quote" component={Quote} />
<Route path="/pricing" component={Pricing} />
<Route path="/about" component={About} />
<Route path="/faq" component={FAQ} />
<Route path="/" exact component={Home} />
<Redirect to="/" />
</Switch>
</Layout>
);
}
}