【问题标题】:React Router Switch inside of Context Provider causes constant flickering (rerendering)Context Provider 内部的 React Router Switch 导致不断闪烁(重新渲染)
【发布时间】:2019-08-10 15:20:46
【问题描述】:

我需要在我的 react 路由器的所有路由中访问相同的状态。但是,当我将 SchedulerContext.Provider 放在 React Router Switch 组件周围时,我会不断地重新渲染(闪烁)一条路由。我想知道问题是否在于使用 Switch 周围的上下文或其他地方。

我注意到它只发生在第一条路线的组件(Dash)中。

class App extends React.Component {
  state = {
    scheduler: {
      ...defaultSchedulerContext,
      fetchScheduledPosts: () => {
        axios
          .post(`${defaultSchedulerContext.API_ENDPOINT}/list`)
          .then(res => {
            if (res.status === 200) {
              this.setState(state => ({
                scheduler: {
                  ...state.scheduler,
                  postsList: res.data
                }
              }))
            } else {
              this.setState(state => ({
                scheduler: {
                  ...state.scheduler,
                  errorMessage: res.status
                }
              }))
            }
          })
      }
    },
  }

  render() {
    return (
      <>
        <SchedulerContext.Provider value={this.state.scheduler}>
          <Switch>
            <Route exact path="/" component={withAuth(Dash)} />
            <Route path="/login" component={Login} />
            <Route path="/register" component={Register} />
          </Switch>
        </SchedulerContext.Provider>
      </>
    )
  }
}

【问题讨论】:

    标签: javascript reactjs react-router react-context


    【解决方案1】:

    通过使用reach/router 而不是react-router 让它工作。

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 2021-04-14
      • 2016-08-25
      • 2020-11-21
      • 2016-06-07
      • 2021-10-29
      • 1970-01-01
      • 2015-06-05
      • 2020-11-21
      相关资源
      最近更新 更多