【发布时间】:2019-10-13 02:48:18
【问题描述】:
我必须在嵌套组件中使用 this.props.history.push('/...') 所以我添加了 withRouter() 以使用 react-router-dom 导航而不会出现历史问题.
但由于我添加了 withRouter,我有 You should not use Route outside a Router 错误。 我已阅读有关此错误的帖子,但我不明白我的代码有什么问题。
Root.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);
【问题讨论】:
-
是的,
withRouter只能用于嵌套在<Router>内的组件中 - 例如,在您的代码中,StripeProvider、App、Comp1、Comp2、NotFound -
@BlunderingPhilosopher 我编辑了我的问题。那么如何使用 withRouter 才能访问 CheckoutForm 中的页面?
-
只需在
CheckoutForm文件的顶部执行import { withRouter} from 'react-router-dom',然后将injectStripe(CheckoutForm)包装成这样:withRouter(injectStripe(CheckoutForm))
标签: javascript reactjs react-router-dom