我在我的React应用程序中使用React-Router-DOM v6.19.0.我在Root.jsx中为路由设置了Layout:

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

export default Root

这在我在Main.jsx的主要路由中显示:

const router = createBrowserRouter(
    createRoutesFromElements(
        <Route path='/' element={<Root />}>
          <Route path='' element={<Home />}/>
          <Route path='about' element={<About />}/>
          <Route path='pinboard' element={<Todos />}/>
          <Route path='lists' element={<Lists />}/>
        </Route>
    )
)

ReactDOM.createRoot(document.getElementById('root')).render(
    <React.StrictMode>
        <RouterProvider router={router} />
    </React.StrictMode>
)

正如您所看到的,页眉和页脚在每条路由中呈现,只有Outlet发生了变化.

问题是,我不想显示特定路由上的页眉和页脚(如注册页面).

我怎样才能做到这一点呢?

我试着做了一次状况判断:

const location = useLocation();

const DontRenderHeaderFooter = ['/login', '/signup'];
const renderHeaderFooter = !DontRenderHeaderFooter.includes(location.pathname);

return (
    <>
        {renderHeaderFooter && <Header />}
        <Outlet />
        {renderHeaderFooter && <Header />}
    </>
)

但这似乎不起作用.

推荐答案

您可以添加一个<Wrapper />组件,它将在页眉+页脚中添加wrap个组件.


因此,在本例中,我们包装页眉+页脚中的所有组件,除了<Home />组件,它只会呈现自身.(你在问题中提到的登录路由)

const router = createBrowserRouter(
    createRoutesFromElements(
        <Route path='/' element={<Wrapper><Home /></Wrapper>}>
          <Route path='' element={<Home />}/>
          <Route path='pinboard' element={<Wrapper><Todos /></Wrapper>}/>
          <Route path='lists' element={<Wrapper><Lists /></Wrapper>}/>
        </Route>
    )
)

const Wrapper = (props) => (
    <React.Fragment>
        <Header />
        {props.children}
        <Footer />
    <React.Fragment>
)

Javascript相关问答推荐

Toast函数找不到其dis

如何在react-Router-dom 6中Forking 路由?

如何解决(不忽略)reaction详尽的linter规则,而不会在获取数据时导致无限的reender循环

如何修复内容安全策略指令脚本-SRC自身错误?

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

通过在页面上滚动来移动滚动条

如何修复(或忽略)HTML模板中的TypeScript错误?'

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

在我的html表单中的用户输入没有被传送到我的google表单中

v—自动完成不显示 Select 列表中的所有项目

如何使用子字符串在数组中搜索重复项

如何在ASP.NET JavaScript中使用Google Charts API仅对绘制为负方向的条形图移动堆叠条形图标签位置

如何在Bootstrap中减少网格系统中单个div的宽度

使用NextJS+MongoDB+Prisma ORM获取无效请求正文,无法发布错误

如果一个字符串前面有点、空格或无字符串,后面有空格、连字符或无字符串,则匹配正则表达式

删除加载页面时不存在的元素(JavaScript)

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

与在编剧中具有动态价值的定位器交互

ReferenceError:无法在初始化之前访问setData

如何使用puppeteer操作所有选项