为什么 <Link> 和 <Redirect> 不触发 connected-react-router 中 state.router 的更新?
Why do <Link> and <Redirect> not trigger updates of state.router in connected-react-router?
在查看了将 redux 与 react-router 相结合的各种包之后,connected-react-router 似乎是最受欢迎的积极支持选择。
我的配置与 docs 中的几乎完全相同,但有一个例外如下所述。
我遇到的问题是 react-router <Redirect>
会重定向,但不会更新 state.router.location
。 Codesandbox MNWE 是原始 codesandbox 的 here. [Edit: I realized just after posting that <Link>
is having exactly the same problem, and illustrated it in a slight modification。抱歉,如果我刚开始的话会更清楚,但我需要睡觉!]
在下面的例子中,有3条路线。第一个匹配根“/”。第二个匹配简单的 URL,如“/anything”,默认匹配“/anything/else”。 <Where>
是一个小组件,显示其 text
属性,然后显示 state.router.location.pathname
.
<Switch>
<Route exact path="/">
<Where text="Root" />
</Route>
<Route exact path="/:thing">
<Where text="Exact" />
</Route>
<Route>
<Redirect to="/" />
</Route>
</Switch>
当您到达时,您会看到 "Root: /",这是您应该看到的。如果在地址栏中添加“/anything”,您会看到 "Exact: /anything"。如果您在地址栏中输入“/anything/else”,地址栏将被重定向回根目录,并且 <Switch>
返回匹配根目录,但您没有看到 "Root: /"参见 "Root: /anything/else"。记录器确认,尽管手动输入的 URL 会触发 state
更新,但 <Redirect>
不会。
也许我认为它应该是错误的,但我没有看到它以某种方式记录下来。我想我犯了一些配置错误?
[我描述的配置异常是我没有在我的应用程序中使用 combineReducers
,我有一个称为 appRootReducer
的减速器(在本例中为空)。所以我写了一点 createRootReducer
包装器。它工作得很好,state.router
的基本更新确实通过了。]
希望对您有所帮助!
在查看了将 redux 与 react-router 相结合的各种包之后,connected-react-router 似乎是最受欢迎的积极支持选择。
我的配置与 docs 中的几乎完全相同,但有一个例外如下所述。
我遇到的问题是 react-router <Redirect>
会重定向,但不会更新 state.router.location
。 Codesandbox MNWE 是原始 codesandbox 的 here. [Edit: I realized just after posting that <Link>
is having exactly the same problem, and illustrated it in a slight modification。抱歉,如果我刚开始的话会更清楚,但我需要睡觉!]
在下面的例子中,有3条路线。第一个匹配根“/”。第二个匹配简单的 URL,如“/anything”,默认匹配“/anything/else”。 <Where>
是一个小组件,显示其 text
属性,然后显示 state.router.location.pathname
.
<Switch>
<Route exact path="/">
<Where text="Root" />
</Route>
<Route exact path="/:thing">
<Where text="Exact" />
</Route>
<Route>
<Redirect to="/" />
</Route>
</Switch>
当您到达时,您会看到 "Root: /",这是您应该看到的。如果在地址栏中添加“/anything”,您会看到 "Exact: /anything"。如果您在地址栏中输入“/anything/else”,地址栏将被重定向回根目录,并且 <Switch>
返回匹配根目录,但您没有看到 "Root: /"参见 "Root: /anything/else"。记录器确认,尽管手动输入的 URL 会触发 state
更新,但 <Redirect>
不会。
也许我认为它应该是错误的,但我没有看到它以某种方式记录下来。我想我犯了一些配置错误?
[我描述的配置异常是我没有在我的应用程序中使用 combineReducers
,我有一个称为 appRootReducer
的减速器(在本例中为空)。所以我写了一点 createRootReducer
包装器。它工作得很好,state.router
的基本更新确实通过了。]
希望对您有所帮助!