javascript - 为什么 React router v4 会做出错误的重定向?

标签 javascript reactjs react-router react-router-v4 react-router-dom

我有一个简单的 React 应用程序,我正在尝试实现身份验证逻辑。这就是我的应用程序的样子:

class App extends Component {
    render() {
        return (
            <Router history={history}>
                <div className="App">
                    <Switch>
                        <PrivateRoute path="/account" component={Account} />
                        <Route component={PublicLayout} />
                    </Switch>
                </div>
            </Router>
        )
    }
}

我的身份验证逻辑是:如果用户 isAuthenticated === true 呈现 /account 页面,否则重定向到 /signin。为此,我创建了自己的简单 PrivateRoute 功能组件:

export default ({ component: Component, ...args }) => {
    return (
        <div>
            <Route {...args} render={(props) => {
                return fakeAuth.isAuthenticated === true
                    ? <Component {...props} />
                    : <Redirect to='/signin' />
            }} />
        </div>
    )
}

因为 PrivateRoute path="/account" 不是确切路径,我希望如果用户转到 /account-setting 它将重定向他到/sign-in。但这不起作用。用户成功转到 /account-setting 并看到 PublicLayout。

这是为什么呢?路由中没有精确键,它必须获取从“/account”开始的所有内容,并在 PrivateRoute 功能组件中使用我的逻辑。

最佳答案

不提供 exact 属性并不意味着它将匹配 /account/account-settings 但它会匹配 /帐户/帐户/其他/帐户/其他/路径。因此,您需要提供两个路径:

<PrivateRoute path="/account" component={Account} />
<PrivateRoute path="/account-setting" component={Account} />

或者,您可以使用正则表达式:

<PrivateRoute path="/account(?=\S*)([a-zA-Z-]+)" component={Account} />

关于javascript - 为什么 React router v4 会做出错误的重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53061658/

相关文章:

javascript - 从列表项中删除类并使用 jquery 将类添加到不同的列表项

javascript - vue html 到 pdf 没有 html2canvas

javascript - 在 react 中调用作为 Prop 传递的方法

javascript - 如何使用 map 坐标更新 URL?

javascript - 为什么 React 中的 closeModal 不起作用?

javascript - React 和 React Router 中的子域路由

javascript - 向 ZingChart 网格添加分页和列排序

javascript - 无法从数组获取信息

javascript - Flash和Javascript可以通信吗?

javascript - 在 createElement() 上 react 生命周期方法