反应路由警告:渲染不同的组件(`Context.Consumer`)时无法更新组件(`App`)

时间:2020-12-19 14:29:14

标签: reactjs redirect react-router

我有私人路线。当用户未登录或电子邮件未验证时,重定向到带有警告的模式登录。它由函数 show modal 运行,但出现错误。 这是工作,通过它在开发中显示此错误。 在 prod 中,我没有收到此错误。

警告:

<块引用>

index.js:1 警告:渲染时无法更新组件 (App) 不同的组件 (Context.Consumer)。找出坏处 setState() 在 Context.Consumer 内调用,按照堆栈跟踪作为 描述于 在路由中(在 PrivateRoute.js:13) 在 PrivateRoute ( 在 App.js:217) 在 Switch 中(在 App.js:196) 在路由器中(由 BrowserRouter 创建) 在 BrowserRouter 中(在 App.js:140) 在 div 中(在 App.js:139) 在应用程序中(在 src/index.js:11) 在提供者中(在 src/index.js:10)

代码:

  <Route
  {...rest}
  render={(props) =>
    (user && user.providerId && user.providerId !== 'password') ||
    (user &&
      user.providerId &&
      user.providerId === 'password' &&
      user.emailVerified) ? (
      <Component {...props} />
    ) : (
      <Redirect to="/">{setLoginModalShow(true)}</Redirect>
    )
  }
/>

我应该如何做这个正确的 请帮忙

1 个答案:

答案 0 :(得分:0)

不要在重定向时调用 setLoginModalShow(true),试试下面的方法,在重定向到主页时传递一些标志作为动作,并在主页上从路由器检查该标志并使用它来显示登录模式

<Redirect
  to={{
    pathname: "/",
    state: { action:  "showLogin" }
  }}
/>