reactjs - 在选择器中访问 react 路由器状态

标签 reactjs react-router react-redux react-router-redux reselect

我正在将应用程序状态的一部分从商店移动到 URL。

我目前正在使用 redux 来管理我的应用程序的状态以及 reselect创建选择器。选择器根据 redux 存储中的状态计算派生值(原则上,这是它们唯一的输入)。

现在部分状态将包含在 URL 中,因此我不知道如何阅读它。

我看过react-router-redux ,乍一看似乎是解决方案(事实上,我可以使用 state.routing.locationBeforeTransitions.query 获得我想要的值),但这似乎不是正确的做法,因为在他们的文档中写道:

You should not read the location state directly from the Redux store.

是否有其他方法可以访问我的位置状态,或者我应该忽略此警告并在我的选择器中使用它?

最佳答案

您是正确的,react-router-redux 文档似乎建议不要以这种方式获取路由器状态。

虽然重新选择选择器通常只使用第一个参数(状态),但它们实际上可以采用第二个参数(组件的 props)。在这些 props 中,您会发现 React Router 传递的 params (假设它们被传递到您尝试连接的组件)。

我在下面提供了一个简单的示例,其中我所做的只是将 location 大写,但您可以想象根据需要制作一个复杂的选择器,其中包括使用 的其他选择器>state 从 Redux 存储中获取内容。

const selectLocation = (_state, props) => props.location;
const selector = createSelector(
  selectLocation, 
  (location) => ({ upperCasedLocation: location.toUpperCase() })
);

const MySmartComponent = (props) => <div>{props.upperCasedLocation}</div>;

export default connect(selector)(MySmartComponent);

关于reactjs - 在选择器中访问 react 路由器状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622864/

相关文章:

reactjs - 如何从 React 发送 CORS 请求?

javascript - 为什么调用 'this.props.actions.updateComment(event.target.value)' 时会丢失当前对象状态?

javascript - 在 JS React 中将值从数据库传递到翻转卡

ajax - React-Router 在 ajax 调用中对 setState() 抛出不变违规

javascript - 错误: Invariant Violation: addComponentAsRefTo when using react-router

javascript - React router 嵌套路由 - 如何在没有路由匹配时重定向

javascript - React Redux 组件不会在状态更改时重新渲染

reactjs - 你应该如何使用 flowtype redux thunk ?

javascript - 在 React Native Redux 中调度导入的函数

javascript - 将不相交的力定向图放入 React 应用程序