当前位置: 首页 > 知识库问答 >
问题:

React:隐藏特定路由上的组件

栾耀
2023-03-14

新反应:

我有一个

组件,我只想在用户访问特定页面时隐藏该组件。

App.JS:

class App extends Component {

  render() {
    return (
      <BrowserRouter>
        <div className="App">
          <Frame>
            <Canvas />
            <Header />
            <Main />
            <NavBar />
          </Frame>
        </div>
      </BrowserRouter>
    );
  }
}

main.js:

const Main = () => (
  <Switch>
    <Route exact activeClassName="active" path="/" component={Home} />
    <Route exact activeClassName="active" path="/art" component={Art} />
    <Route exact activeClassName="active" path="/about" component={About} />
    <Route exact activeClassName="active" path="/contact" component={Contact} />
  </Switch>
);

共有1个答案

蒋何平
2023-03-14

我也是新反应,但遇到了这个问题。基于react-router的替代答案是使用wishrouter,它包装要隐藏的组件并为其提供location道具(等等)。

import { withRouter } from 'react-router-dom';    
const ComponentToHide = (props) => {
  const { location } = props;
  if (location.pathname.match(/routeOnWhichToHideIt/)){
    return null;
  }

  return (
    <ComponentToHideContent/>
  )
}

const ComponentThatHides = withRouter(ComponentToHide);

请注意文档中的警告:

Wisrouter不像React Redux的connect订阅状态更改那样订阅位置更改。相反,在位置更改从组件传播出去后重新呈现。这意味着Wisrouter不会在路由转换时重新呈现,除非它的父组件重新呈现。

这个警告是不成立的,这种方法似乎对我来说对于一个非常类似于OP的用例是有效的。

 类似资料:
  • 大家好,我不知道发生了什么事。我有以下路线: 只有路径为“/”的路由和路径为“/patient/:id”的路由才有效,其他3条路由只是没有显示与路径对应的组件。 这就是我进入路线的方式。我有一个标题组件,上面有正确的链接。见下文 在头组件中,我从'react router dom'导入{Link};在我声明路由的文件中,我从'react router dom'导入{BrowserRouter,Ro

  • 我有一个React应用程序,目前正在使用react-router@4.2.0,当URL更改时,我正在努力渲染特定的组件。 当我尝试访问时,CityList组件返回一个PropTypes错误。我已经尝试在LocationsWrapper中的Route组件中添加,然后再添加Main config,但是,这会影响其他路由,例如,使其变为空。 //浏览器路由器 //路由器配置-(路由) 我最好避免

  • 我有一个大型git项目,我愚蠢地将其导入eclipse并运行了自动格式化。现在,项目中的每个文件都显示为已修改。与其提交我的格式化文件,我宁愿恢复所有我只格式化过且没有其他更改的文件。例如: 我知道那是文件2。cpp文件2。h和文件3。已使用内容(即,不只是格式化)修改了cpp。我想隐藏对这三个文件的更改,然后签出一个旧版本,这样我就可以在之后重新应用对这些文件的更改。我宁愿避免这样的事情: 如果

  • 我对React Native非常陌生,我想知道如何隐藏/显示组件 这是我的测试用例: 我有一个组件,我想要的是当输入获得焦点时显示,然后当用户按下取消按钮时隐藏。 我不知道如何“访问”TouchableHighlight组件,以便在我的函数中隐藏/显示它 另外,如何从一开始就隐藏按钮?

  • 我确实有一些独特的要求,我想隐藏要从特定角色用户中选择的角色。 例如,我有一个角色名称admin、部门1、部门2和部门3。作为管理员,我应该只能在门户中看到部门1、部门2和部门3的角色管理。 但如果我为管理员定义权限,他/她可以管理角色。管理员用户可以查看Liferay中可用OOTB的所有角色。 有人能帮我配置一下吗?

  • 问题内容: 我想在登录页面中隐藏导航栏。 我确实做到了,但是在其他页面上看不到导航栏。 该代码是My App.jsx文件的一部分。 我在App的状态下创造历史。当此路径名是“ /”或“ / login”时,我隐藏了导航栏。 有用! 但是然后我输入了ID和密码,然后单击登录按钮,获得“成功”结果,并导航到“ / main”。 现在我在主组件中也看不到导航栏。 我怎样才能做到这一点? 对不起,我的英文