簡體   English   中英

我如何將 React Context 與 react-router-dom 一起使用?

[英]How can I use React Context with react-router-dom?

授權上下文:

import { createContext } from "react";
export const AuthContext = createContext(null);

應用程序.js:

const App = () => {
  const isLogin = false;

  if (isLogin) {
    return (
      <RouterProvider router={privateRoute} />
    );
  } else {
    return (
      <RouterProvider router={publicRoute} />
    );
  }
};

export default App;

我嘗試將<RouterProvider>放在AuthContext中,如下所示:

<AuthContext.RouterProvider router={privateRoute} />

像這樣:

<AuthContext>
  <RouterProvider router={privateRoute} />
</AuthContext>

這些選項都不起作用。 我究竟做錯了什么?

您正在嘗試將AuthContextRouterProvider一起使用,但AuthContext沒有名為RouterProvider的屬性或組件。

要將AuthContextRouterProvider結合使用,您需要將RouterProvider組件包裝在一個使用AuthContext的值的組件中(即 useContext(AuthContext) )。

這里有一個片段可以幫助你......在這里我們使用AuthContext值來確定routes的值,然后將它與RouterProvider一起使用

 const App = () => { const auth = useContext(AuthContext); const routes = auth.isLoggedIn? privateRoute: publicRoute; return ( <RouterProvider router={routes} /> ); }; export default App;

在里面,您需要將App組件包裝在AuthContext ,例如...

ReactDOM.createRoot(document.getElementById("root")).render(
  <React.StrictMode>
    <AuthContext>
      <App />
    </AuthContext>
  </React.StrictMode>
);

一個與另一個無關。 問題是AuthContext沒有任何RouterProvider屬性,您嘗試使用的代碼也沒有實際使用 React context Provider組件和值。

只需使用AuthContext.Provider組件包裝App組件並確保傳遞上下文值。

例子:

<AuthContext.Provider value={{ ..... }}>
  <App />
</AuthContext.Provider>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM