首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[ReactJS][React-Router-V4] Redirects[auth]问题

[ReactJS][React-Router-V4] Redirects[auth]问题
EN

Stack Overflow用户
提问于 2019-01-14 17:16:40
回答 3查看 38关注 0票数 0

我正在建立一个新的React JS项目,我想在人们没有联系的时候重定向authPage上的人们。

我有一个这样的App容器:

代码语言:javascript
复制
class App extends Component {
  render() {
return (
  <div className={'app-wrapper'}>
    <Helmet
      titleTemplate="FFMKR"
      defaultTitle="React.js Boilerplate"
    >
      <meta name="description" content="A React.js Boilerplate application" />
    </Helmet>
    <Header />
    <div className={'container-fluid'}>
      <div className={'row'}>
        <SideBar />
        <main role="main" className={'col-md-9 ml-sm-auto col-lg-10 px-4'}>
          <Switch>
            <Route path="/login" component={Login} />
            <PrivateRoute exact path="/" component={HomePage} />
            <Route path="" component={NotFoundPage} />
          </Switch>
        </main>
      </div>
    </div>
  </div>
);
}
}

我的PrivateRoute是这样的:

代码语言:javascript
复制
  const PrivateRoute = (props) => {
  const { component: Component, isLogged, ...rest } = props;
  console.log('on est dans la route lol', isLogged, {...rest});

  return (
    <Route
  {...rest}
  render={propsRender =>
    isLogged ? (
      <Component {...propsRender} />
    ) : (
      <Redirect
        to={{
          pathname: "/login",
          state: { from: propsRender.location }
        }}
      />
    )
  }
/>
);
};


PrivateRoute.propTypes = {
  isLogged: PropTypes.bool,
};

export default PrivateRoute;

我的变量isLogged已经是false了。当我启动我的应用程序时,我打开url "/“,我在url"/login”上重定向,但我的登录组件没有显示:

https://image.noelshack.com/fichiers/2019/03/1/1547456719-capture-d-ecran-de-2019-01-14-10-04-38.png

当我在url "/login“上重新加载时,我的登录组件工作正常:

https://image.noelshack.com/fichiers/2019/03/1/1547456719-capture-d-ecran-de-2019-01-14-10-04-58.png

为什么我启动我的应用程序,我的登录组件没有出现?

EN

回答 3

Stack Overflow用户

发布于 2019-01-14 17:22:25

问题是您必须返回Redirect组件,而不是呈现它。因此,您必须执行类似以下示例的操作

代码语言:javascript
复制
export class PrivateRoute extends Component {
  render() {
    const { isLogged } = this.props;

    if (!isLogged()) {
      return <Redirect to="/login" />;
    }

    return (
      <Route
        {...this.props}
        component={props => (
          <this.props.component
            {...props}
          />
        )}
      />
    );
  }
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-14 18:23:42

如果地址栏中的url更改为/login,则react-router正在按预期工作。您的登录组件可能有问题。尝试将Login组件替换为如下所示的简单内容,然后进行测试:

代码语言:javascript
复制
function Login() {
  return <h3>Test login page</h3>;
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-14 21:25:03

Ho,很抱歉我没有在我的屏幕上显示这些信息,但是url地址栏变成了/login,我已经返回了这个函数,但是我有同样的问题。

这不是第一次工作,但如果我在url /login上重新加载页面,这是工作,我有“测试登录页面”在屏幕上。

当isLogged ===为真并且正常工作时,我测试了PrivateRoute组件。我不明白为什么我的登录组件没有显示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54178539

复制
相关文章

相似问题

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