好的,我厌倦了尝试
undefined
方法不起作用。知道为什么会这样吗?
onEnter
编辑:
当我调用// Authentication "before" filter
function requireAuth(nextState, replace){
console.log("called"); // => Is not triggered at all
if (!isLoggedIn()) {
replace({
pathname: '/front'
})
}
}
// Render the app
render(
<Provider store={store}>
<Router history={history}>
<App>
<Switch>
<Route path="/front" component={Front} />
<Route path="/home" component={Home} onEnter={requireAuth} />
<Route exact path="/" component={Home} onEnter={requireAuth} />
<Route path="*" component={NoMatch} />
</Switch>
</App>
</Router>
</Provider>,
document.getElementById("lf-app")
时执行该方法,但显然这不是目的,我也不会得到所需的参数。
答案 0 :(得分:95)
onEnter
上不再存在 react-router-4
。您应该使用<Route render={ ... } />
来获得所需的功能。我相信Redirect
示例有您的具体方案。我在下面修改它以匹配你的。
<Route exact path="/home" render={() => (
isLoggedIn() ? (
<Redirect to="/front"/>
) : (
<Home />
)
)}/>
答案 1 :(得分:25)
来自react-router-v4 onEnter
,onUpdate
和onLeave
已删除,
根据{{3}}上的文件:
on*
属性
React Router v3提供onEnter
,onUpdate
和onLeave
方法。这些本质上是重建React的生命周期方法。使用v4,您应该使用组件的生命周期方法 由
<Route>
呈现。你会使用而不是onEnter
componentDidMount
或componentWillMount
。您将使用onUpdate
的位置, 您可以使用componentDidUpdate
或componentWillUpdate
(或可能componentWillReceiveProps
)。onLeave
可以替换为componentWillUnmount
{{1}}。