gpt4 book ai didi

javascript - 使用 withRouter 后,不应在 Router 外部使用 Route

转载 作者:行者123 更新时间:2023-11-30 19:32:05 25 4
gpt4 key购买 nike

我必须在嵌套组件中使用 this.props.history.push('/...') 所以我添加了 withRouter() 以使用 react-router-dom 导航而没有历史问题.

但是因为我添加了 withRouter,所以出现了You should not use Route outside a Router 错误。我已阅读有关此错误的帖子,但我不明白我的代码有什么问题。

根.js:

import { BrowserRouter as Router, Route, Switch, Redirect, withRouter} from 'react-router-dom'
...
const Root = ({ store }) => (
<Router>
<Provider store={store}>
<StripeProvider apiKey="pk_test_XXXXXXXXX">
<Switch>
<Route exact path="/" component={App} />
<Route path="/comp1" component={Comp1} />
<Route path="/comp2" component={Comp2} />
<Route path="/store" component={MyStoreCheckout} />
<Route component={Notfound} />
</Switch>
</StripeProvider>
</Provider>
</Router>
)
Root.propTypes = {
store: PropTypes.object.isRequired
}
export default withRouter(Root)

和 index.js:

import { createStore } from 'redux'
import myReducer from './redux/Reducers/myReducer'
import Root from './Root'
import Store from './redux/Store/store'

render(<Root store={Store} />, document.getElementById('root'))

我使用 withRouter 可以在 CheckoutForm 中调用 this.props.history(...)MyStoreCheckout.js:

class MyStoreCheckout extends React.Component {
render() {
return (
<Elements>
<InjectedCheckoutForm />
</Elements>
);
}
}
export default MyStoreCheckout;

CheckoutForm.js:

class CheckoutForm extends React.Component {
handleSubmit = () => {
fetch(getRequest)
.then((response) => response.json())
.then(...)
.then(() => this.goToSuccessPage())
}

goToSuccessPage(){
this.props.history.push('/') ; //----- error is here if I have no withRouter

render() {
return (
<form onSubmit={this.handleSubmit}>
<DetailsSection/>
<CardSection />
<button>Confirm order</button>
</form>
);
}
}

export default injectStripe(CheckoutForm);

最佳答案

正如我在评论中提到的...只需在 CheckoutForm 文件的顶部导入 withRouter,然后在底部用它包裹导出。像这样:

CheckoutForm.js:

import { withRouter} from 'react-router-dom'

class CheckoutForm extends React.Component {
// ... your class code ...
}

export default withRouter(injectStripe(CheckoutForm));

如果您的 injectStripe HOC 没有将 withRouter 中的所有属性传递给 CheckoutForm,您可以尝试执行 export默认 injectStripe(withRouter(CheckoutForm)); 相反,但是 order shouldn't matter (如果设置正确)

关于javascript - 使用 withRouter 后,不应在 Router 外部使用 Route,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com