You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router如何仅渲染对应路由组件、不展示其他额外组件?

问题根因

你当前代码将FormTareas和BasicTable放在路由匹配逻辑<Switch>外,因此不受路由规则限制,所有路径下都会渲染,这是/Modificar路由下仍能看到这两个组件的原因。

解决方法

将两个公共组件放到默认路由的匹配规则内即可,同时注意React Router v5版本下,给路由组件传递自定义参数时不要使用component属性,改用render属性避免函数上下文丢失,修改后的代码如下:

<BrowserRouter>
  <Switch>
    {/* /Modificar路由仅渲染Modificar组件 */}
    <Route
      exact
      path="/Modificar"
      render={() => (
        <Modificar
          tareaACambiar={tareaACambiar}
          actualizar={actualizar}
        />
      )}
    />
    {/* 根路由渲染表单和列表组件 */}
    <Route
      exact
      path="/"
      render={() => (
        <>
          <FormTareas
            handleChange={handleChange}
            handleSubmit={handleSubmit}
            validateForm={validateForm}
          />
          <BasicTable
            tareas={tareas}
            eliminarTarea={eliminarTarea}
            modificarTarea={modificarTarea}
          />
        </>
      )}
    />
  </Switch>
</BrowserRouter>

补充说明

之前你将组件放入路由后函数失效,是因为component属性每次匹配路由时都会新建组件实例,会清空原有作用域下的函数引用,render属性会复用当前父组件的作用域,所有传递的函数和状态都能正常生效。

内容的提问来源于stack exchange,提问作者JavierLoera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:18:04