7

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

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

现在部分状态将包含在 URL 中,所以我不确定如何阅读它。

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

您不应该直接从 Redux 存储中读取位置状态。

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

4

1 回答 1

7

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

虽然重新选择选择器通常只使用第一个参数(状态),但它们实际上可以使用第二个参数(组件的道具)。在这些 props 中,您会发现paramsReact Router 正在传递(假设它们正在传递给您尝试传递的组件connect)。

我在下面包含了一个简单的示例,我所做的location只是state将 .

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);
于 2016-09-22T03:06:03.327 回答