【问题标题】:ReactJS router v4 Mobx - Router wont re-render components?ReactJS 路由器 v4 Mobx - 路由器不会重新渲染组件?
【发布时间】:2018-10-15 12:35:34
【问题描述】:

我使用 mobx Provider 提供商店,通过包装 Router

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

App 中,我有两个组件,HeaderMainHeader 包含 Link 到路由,Main 包含路由 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 只是一个确保用户通过身份验证的函数,如果没有,则重定向到主页。

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

问题

当我点击链接时,我的 URL 确实发生了变化,但组件没有呈现,就像页面在加载网页时卡在最初加载的组件上一样。 p>

        <Link to="/">Home</Link>
        <Link to='/login'>Log In</Link>

【问题讨论】:

    标签: javascript reactjs react-router


    【解决方案1】:

    如果您使用的是新的react-router-dom。那么你必须使用库提供的withRouter Hoc 并用它包装你的组件。

    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)
    

    哪个组件负责执行路由。将其包装在withRouter

    【讨论】:

    • 我必须用这个包装所有组件还是只包装包含路由的组件?
    • 引起路由变化的所有组件。也可以是Header
    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 2019-01-20
    • 2021-02-25
    • 2020-03-23
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多