代码之家  ›  专栏  ›  技术社区  ›  Ben Beri

ReactJS路由器v4 Mobx-路由器不会重新渲染组件吗?

  •  0
  • Ben Beri  · 技术社区  · 8 年前

    我用mobx Provider 通过包装 Router

      <Provider {...stores}>
        <BrowserRouter >
        <App />
        </BrowserRouter>
      </Provider>
    

    App 我有两个部分, Header Main . 收割台 Link 到路线和 主要 包含路由 Switch :

      <div className="main">
          <Route exact path='/' component={Home} />
          <Route exact path='/login' component={Login} />
          {/* <UnvalidatedUserRoute exact path='/login' store={this.props.User} component={Login} /> */}
          <ValidatedUserRoute exact path='/todos' store={this.props.User} component={UserTodos} />
      </div>
    

    ValidatedUserRoute 只是一个确保用户经过身份验证的函数,如果没有,则重定向到home。

     const ValidatedUserRoute = ({component: Component}, store, ...rest) => (
        <Route 
          {...rest} 
          render={props => 
            store.validated ? (
            <Component {...props} />) : (
              <Redirect to={{
                pathname: "/"
              }}
              />
            )
        } />
      );
      export default ValidatedUserRoute
    

    问题

    我的网址变了 ,但组件不会呈现,就像页面在加载网页时卡在最初加载的组件上一样。

            <Link to="/">Home</Link>
            <Link to='/login'>Log In</Link>
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   hannad rehman    8 年前

    如果您使用的是新的 react-router-dom . 那你就得用 withRouter 并用它包装您的组件。

    import {withRouter} from 'react-router-dom'
    
    const ValidatedUserRoute = ({component: Component}, store, ...rest) => (
        <Route 
          {...rest} 
          render={props => 
            store.validated ? (
            <Component {...props} />) : (
              <Redirect to={{
                pathname: "/"
              }}
              />
            )
        } />
      );
      export default withRouter(ValidatedUserRoute)
    

    哪个组件负责执行路由。把它包起来 带路由器