【发布时间】:2015-11-19 10:22:28
【问题描述】:
我正在尝试将 Backbone.Marionette 应用程序替换为 React,并且在考虑查询参数时遇到了困难。我想我在理解这种模式时错过了一种非常简单的平静,所以如果这个问题完全是无稽之谈,我深表歉意。我将不胜感激任何支持或只是指出我可以更具体地用谷歌搜索的一些方向。
有一个/users 页面列出了用户,您可以通过搜索栏过滤用户。因此,如果您想过滤用户名中包含“joe”的用户,我会使用/users?username=joe 之类的查询参数向服务器发出请求。此外,我还可以通过添加 page 参数来进行分页 (/users?username=joe&page=1)。
如果我只考虑功能,流程可能是
- 客户端将
joe插入输入元素并点击搜索。 - 点击Search按钮会触发
Action(如Action.getUser)。 -
Action向服务器发出请求并接收结果 -
Dispatcher将带有结果负载的函数分派给对Action感兴趣的任何人(通常是Store)。 -
Store的状态随着Action收到的新结果而改变 - 视图 (
Component) 通过监听Store的变化重新渲染。
它按预期工作。但是,我希望客户端能够为当前过滤结果添加书签,并能够在一段时间后返回同一页面。这意味着我需要在某个地方保存有关客户端所做的搜索词的明确信息,通常是 url(对吗?)。所以我需要使用查询参数更新 url 以保存搜索词 (/users?username=joe&page=1)。
我很困惑的是何时何地更新网址?我现在能想到的是下面的 2 个选项 - 它们似乎根本不干净。
选项 1
- 客户端在输入元素中插入
joe,然后点击搜索。 - 点击 Search 按钮会触发带有新查询参数 (
/users?username=joe&page=1) 的 ReactRouter 转换。 - 视图 (
Component) 通过this.props.params和this.props.query接收新参数。 - 视图 (
Component) 根据接收到的查询参数触发Action,例如Action.getUser- 在本例中为username=joe&page=1。
之后同上
选项2(与我上面解释的只有6个不同)
- 客户端在输入元素中插入
joe,然后点击搜索。 - 点击Search按钮会触发
Action(如Action.getUser)。 -
Action向服务器发出请求并接收结果 -
Dispatcher将带有结果负载的函数分派给对Action感兴趣的任何人(通常是Store)。 -
Store的状态随着Action收到的新结果而改变 - 视图 (
Component) 通过监听Store的更改重新渲染。 不知何故(我还不知道如何)根据其props更新其网址(如this.props.searchusername和this.props.searchpage)
处理查询参数的最佳做法是什么? (或者这可能不是特定于查询参数) 我是否完全误解了设计模式或架构?提前感谢您的支持。
我读过的一些文章
【问题讨论】:
标签: reactjs flux react-router