我正在将应用程序状态的一部分从商店移动到 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/