【发布时间】:2017-06-14 21:54:01
【问题描述】:
我正在使用 React、Redux 和 React Router。我想将大部分应用程序状态存储在 redux 存储中,并将其中的一些位存储在 URL 查询中。我相信有两种方法可以做到这一点:
- 在每次状态更改后将 redux 存储与 URL 查询同步
- 不要在 redux 存储中存储“一些位”,而是通过某种方式(类似于 reducer 的工作方式)来更改 URL 查询,就好像它是另一个存储一样
我不确定第一种方法是否可行,因为序列化状态长度可能超过 URL 限制。所以我可能应该选择第二个。
例如,我在一个页面上有几个复选框,我希望它们的状态(选中/未选中)反映在 URL 中,因此我可以将我的 URL 链接发送给其他人,他们会像我一样选中相同的复选框.所以我像这样渲染我的复选框:
export class MyComponent extends React.Component {
handleCheckboxClick(...) {
// Some magic function, that puts my urlState into URL query.
updateUrlState(...)
}
render() {
// 'location' prop is injected by react router.
const urlState = getUrlState(this.props.location.query);
// Let's say 'checkboxes' are stored like so:
// {
// foo: false,
// bar: true,
// }
const { checkboxes } = urlState;
return (
<div>
{ checkboxes.map(
(checkboxName) => <Checkbox checked={ checkboxes[checkboxName] } onClick={ this.handleCheckboxClick }>{ checkboxName }</Checkbox>
)}
</div>
)
}
}
我想要魔术updateUrlState 函数做的是获取当前 URL 查询,更新它(将某些复选框标记为选中)并将结果推送回 URL 查询。
由于这个临时的 URL 状态可能是嵌套的和复杂的,它可能应该被序列化并存储为 JSON,因此生成的 URL 看起来有点像:https://example.com/#/page?checkboxes="{"foo":false,"bar":true}"。
这可能吗?
【问题讨论】:
-
这可能就是你要找的stackoverflow.com/questions/824349/…
-
@EdmundLee,我已经评论了你的回答,这不是我要问的。
标签: javascript reactjs ecmascript-6 redux