【发布时间】:2018-03-25 14:47:21
【问题描述】:
我有一个受保护的路由,使用高阶组件实现,但是在我的作为子组件的 App.js 中,触发了它的 componentDidMount 方法,我想知道为什么会这样..
Route.js
...
<BrowserRouter>
<Switch>
<Route exact path='/app' component={CheckPermission(App)} />
<Route exact path='/app/login' component={Login} />
</Switch>
</BrowserRouter>
...
Auth.js
export default function CheckPermission(EnhancedComponent) {
class Auth extends Component {
static contextTypes = {
router: PropTypes.object
}
componentWillMount() {
if (!this.props.isAuth) {
this.context.router.history.replace(`/login`)
}
}
componentWillUpdate() {
if (!this.props.isAuth) {
this.context.router.history.replace(`/login`)
}
}
render() {
return <EnhancedComponent { ...this.props } />
}
}
return connect()(Auth)
}
App.js
class App extends Component {
componentDidMount(){
console.log('test') //why is this trigger??
}
render() {
return <h1>App</h1>
}
}
如果我在 App.js 的 componentDidMount 中有 API 调用,它会导致不需要的调用,我认为 Auth.js 的 componentWillMount 已经阻止了渲染触发?我在浏览器中看到,Auth.js 的重定向刚刚起作用。
【问题讨论】:
标签: javascript reactjs redux higher-order-components