我构建了一个大型应用程序,其中导航栏上的单个按钮打开一个模式。
我正在使用上下文 API 跟踪 modalOpen 状态。
因此,用户单击导航栏上的按钮。模态打开。Modal 有一个名为 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;
这种方法的问题是我不断收到错误
您尝试重定向到您当前所在的同一条路线
另外,我宁愿不使用这种方法,因为那样我就必须撤消完成状态(否则当用户再次单击按钮时,完成是真的,我们只会被重定向)......
知道 withRouter 和 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>
);
}
}