我有一个Reaction应用程序,其中我正在使用Reaction-Router.在我的布局组件中,我有一个这样的 struct :

import React from 'react';
import Header from './components/Header/Header';
import Footer from './components/Footer/Footer';
import { Outlet } from 'react-router-dom';

function Layout() {
  return (
    <>
      <Header />
      <Outlet />
      <Footer />
    </>
  );
}

export default Layout;

现在,当一条特定的路由被击中时,我希望有条件地呈现两个不同的组件或更换两个插座.是否有必要使用嵌套来实现这一点,或者有没有一种方法可以直接拥有两个出口?

此外,我的NavLink中的isActive属性也面临着一个问题.我希望div可见或在路由处于活动状态时显示.以下是我的NavLink的代码:

<NavLink
  to="/"
  onClick={handleHomeClick}
  className={({ isActive }) =>
    `block py-2 pr-4 pl-3 duration-200 ${isActive ? "text-orange-700" : "text-gray-700"} border-b border-gray-100 hover:bg-gray-50 lg:hover:bg-transparent lg:border-0 hover:text-orange-700 lg:p-0`
  }
  aria-current="page"
>
  HOME
  {isActive && (
    <div className="absolute top-full left-1/2 transform -translate-x-1/2 w-2 h-2 mt-1 border-2 border-yellow-500 bg-black rotate-45" />
  )}
</NavLink>

但这是给出了错误isActive没有定义.我试着在网上搜索,但什么也没找到.

推荐答案

当命中特定路由时,我希望有条件地呈现 两个不同的组件或更换两个插座.

你可以在那条特定的路由上做到这一点.使用三元运算符在elementprops 上有条件地渲染组件.此外,每条布局路由一次只能渲染一个插座.

示例:

<Routes>
  ...
  <Route element={<Layout />}>
    ...
    <Route
      path="/somePath"
      element={someCondition
        ? <ComponentA />
        : <ComponentB />
      }
    />
    ...
  </Route>
  ...
</Routes>

当然,您也可以将其抽象为组件.

const SomeComponent = () => {
  ...

  return someCondition
    ? <ComponentA />
    : <ComponentB />
};
<Routes>
  ...
  <Route element={<Layout />}>
    ...
    <Route path="/somePath" element={<SomeComponent />} />
    ...
  </Route>
  ...
</Routes>

我的NavLink号房里的isActive号房出了问题.我想要一辆 Div以在路由处于活动状态时可见或显示.

NavLink部件还可以起到与className(and 103)props 类似的childrenprops 的作用.

<NavLink
  to="/"
  onClick={handleHomeClick}
  className={({ isActive }) =>
    `block py-2 pr-4 pl-3 duration-200 ${isActive ? "text-orange-700" : "text-gray-700"} border-b border-gray-100 hover:bg-gray-50 lg:hover:bg-transparent lg:border-0 hover:text-orange-700 lg:p-0`
  }
  aria-current="page"
>
  HOME
  {({ isActive }) => isActive && (
    <div className="absolute top-full left-1/2 transform -translate-x-1/2 w-2 h-2 mt-1 border-2 border-yellow-500 bg-black rotate-45" />
  )}
</NavLink>

Javascript相关问答推荐

使用print This时, map 容器已在LeafletJS中初始化

调用removeEvents不起作用

我不知道为什么setwritten包装promise 不能像我预期的那样工作

嵌套异步JavaScript(微任务和macrotask队列)

如何在Obsidian dataview中创建进度条

在服务器上放置了Create Reaction App Build之后的空白页面

为什么!逗号和空格不会作为输出返回,如果它在参数上?

查找最长的子序列-无法重置数组

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

用于编辑CSS样式的Java脚本

Prisma具有至少一个值的多对多关系

变量的值在Reaction组件中的Try-Catch语句之外丢失

JS:XML insertBefore插入元素

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

如何在HTMX提示符中设置默认值?

使用Document.Evaluate() Select 一个包含撇号的HTML元素

是否可以将Select()和Sample()与Mongoose结合使用?

调用特定数组索引时,为什么类型脚本不判断未定义

当达到高度限制时,如何裁剪图像?使用html和css

在ReactJS上挂载组件时获得多个身份验证请求