我有一个关于Reaction的项目,在布局上,我使用了一个旧版本.我想用新版本的react-router-dom,但我有一些问题.这些是我的密码.

App.js

<Route element={<AuthLayout />}>
  <Route element={<LoginPage />} path="/login" />
  <Route element={<RegisterPage />} path="/register" />
  <Route element={<ForgotPassword />} path="/forgotPassword" />
  <Route element={<Verify />} path="/forgotpassword/verify" />
</Route>

AuthLayout已经是旧的编码了.而且很管用.

const AuthLayout = ({ page, children, img }) => {
  return (
    <main className={`auth-layout ${page}`}>
      {children}
      <div className="images">
        <img src={img} alt={page} />
        <img src={Logo} alt="Logo" className="logo" />
      </div>
    </main>
  );
};

我想用OutletuseOutletContext,但我不知道怎么才能送pageimgprops ?我不太明白这个话题.

我的一个 children props --ForgotPassword

import ForgotImg from "assets/img/forgot-password.svg";

<AuthLayout page="forgot-password" img={ForgotImg}>
  <form onClick={sendPassword}>

  </form>
</AuthLayout>

推荐答案

如果我没有理解错的话,您是在问路由的子/嵌套路由如何将pageimg的值传递给父布局路由,然后它可以呈现这些值.

您可以使用布局路由来实现这一点,其中包含一些状态和回调,这些状态和回调通过上下文提供程序向下传递,而包装器组件则访问上下文并向上传送值.

示例:

const AuthLayout = () => {
  const [{ img, page }, setState] = React.useState({});

  const setPageData = React.useCallback(
    ({ img, page }) => setState({ img, page }),
    []
  );
  
  return (
    <main className={`auth-layout ${page}`}>
      <Outlet context={{ setPageData }} />
      <div className="images">
        <img src={img} alt={page} />
        <img src={Logo} alt="Logo" className="logo" />
      </div>
    </main>
  );
};

const withPageData = (Component, { img, page }) => (props) => {
  const { setPageData } = useOutletContext();

  useEffect(() => {
    setPageData({ img, page });
  }, [img, page, setPageData]);

  return <Component {...props} />;
}
import ForgotImg from "assets/img/forgot-password.svg";

...

const ForgotPassword = (props) => {
  ...

  return (
    ...
    <form onClick={sendPassword}>

    </form>
    ...
  );
};

const pageData = { page: "forgot-password", img: ForgotImg };

export default withPageData(ForgotPassword, pageData);
<Route element={<AuthLayout />}>
  <Route element={<LoginPage />} path="/login" />
  <Route element={<RegisterPage />} path="/register" />
  <Route element={<ForgotPassword />} path="/forgotPassword" />
  <Route element={<Verify />} path="/forgotpassword/verify" />
</Route>

Javascript相关问答推荐

在nodejs中使用快速路由的API路径

如果使用React Select ,如何将CSS类添加到元素中?

将下拉分区与工具提示结合起来

Promise.all立即跳到那时,而不是调用所有Promise

在Chart.js 4.4.2中移动到不同大小的容器时,图表不会调整大小

Express.js:以块形式发送响应

错误:找不到react-redux上下文值;请确保该组件包装在React原生Expo应用程序中的提供者中

获取最接近的父项(即自定义元素)

调用SEARCH函数后,程序不会结束

Angular:ng-contract未显示

使用redux-toolet DelivercThunks刷新访问令牌

如何获取转换字节的所有8位?

Bootstrap动态选项卡在切换选项卡后保持活动状态,导致元素堆叠

硬币兑换运行超时

react—router v6:路由没有路径

在nextjs服务器端api调用中传递认证凭证

如何调用名称在字符串中的实例方法?

我可以使用空手道用户界面来获取网页的当前滚动位置吗?

如何将数组用作复合函数参数?

select 2-删除js插入的项目将其保留为选项