首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将导航栏保留在路线开关上

将导航栏保留在路线开关上
EN

Stack Overflow用户
提问于 2018-02-11 23:19:54
回答 2查看 2.3K关注 0票数 0

我的react组件有问题。基本上,我的界面应该是一个用ReactJS构建的SPA。

在使用auth0-js实现身份验证的过程中,我还实现了一些路由。布局如下所示:

每当我点击"Recipes“链接时,它应该重定向到路由"/recipes”。但是,当我使用<Route path="/recipes" component={Recipes} />实现路由时,它只呈现Recipes组件中实际返回的内容。我从react做的事情中知道这是正确的。现在,我想保留导航栏,但只想交换下面的组件,所以我想像在App.js中一样更改导航栏下面的内容。

我如何才能做到这一点?是路由或组件有问题吗?我不想总是重新渲染所有的东西。我也想保持整个页面的风格。有没有办法做到这一点?

整个代码可以在here上找到。

EN

回答 2

Stack Overflow用户

发布于 2018-02-12 08:53:27

我同意Jyutzio的观点,即您需要将导航组件移动到子路由之上,以便仅更改子路由的内容。

为了使用登录/注销状态更新导航栏,您可能需要考虑实现redux。我有一个项目与您的几乎完全相同的要求-导航头是静态的。

在我的标头中有import { connect } from 'react-redux';

在组件底部,我在导出前使用connect:

代码语言:javascript
复制
function mapStateToProps(state) {
  return { authenticated: state.auth.authenticated };
}

Header = connect(mapStateToProps)(Header);

export default Header;

然后,这允许我检查“经过身份验证”的状态部分,并相应地呈现。

代码语言:javascript
复制
renderLogoutButton() {
  if(this.props.authenticated) {
    return(
      <li><a onClick={...}>Logout</a></li>
    );
  } else {
    return(
      <li><a onClick={...}>Login</a></li>
    );
  }
}

您将需要设置一个reducer,但有许多资源解释redux设置。

我设置的路由器(简化版)如下:

代码语言:javascript
复制
import Admin from './index';
...
<BrowserRouter>
  <Switch>
    <Route exact path="/login" component={Login} />
    <Route path="/" component={Admin} />
  </Switch>
</BrowserRouter>

索引:

代码语言:javascript
复制
import AdminRouter from './admin/admin_router';
...
<div>
  <Menu />
  <div>
    <AdminRouter />
  </div>
</div>

admin_router:

代码语言:javascript
复制
<div>
  <Switch>
    <Route exact path="/" component={Home} />
    <Route exact path="/details" component={AdminDetails} />
    <Route component={PageNotFound} />
  </Switch>
</div>
票数 0
EN

Stack Overflow用户

发布于 2018-02-12 00:50:01

如果您将导航组件放在开关的上方,它将解决您的问题。

代码语言:javascript
复制
const Routes = () => (
  <Router history={history} component={Home}>
    <Route component={Navigation}/>
    <Switch>
      <Route exact path="/" render={props => <Home auth={auth} {...props} />} />
      <Route path="/home" render={props => <Home auth={auth} {...props} />} />
      <Route
        path="/callback"
        render={props => {
          handleAuthentication(props);
          return <Callback {...props} />;
        }}
      />
      <Route component={NotFound} />
    </Switch>
  </Router>
);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48733026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档