我正在尝试将Backbone.Marionette应用程序替换为React,并且面临着思考查询参数的困难。我想我在理解这种模式时缺乏真正的和平,因此,如果这个问题完全是胡说八道,我深表歉意。我将不胜感激任何支持,或者只是为我指明了可以更具体地通过Google进行搜索的方向。
有一个/users列出用户的页面,您可以通过搜索栏过滤用户。因此,如果您要过滤用户名中包含“ joe”的用户,我将向服务器发出查询参数,例如/users?username=joe。此外,我也可以通过添加page参数(/users?username=joe&page=1)进行分页。
/users
/users?username=joe
page
/users?username=joe&page=1
如果我只考虑功能,流程可能是
joe
Action
Dispatcher
Store
Component
并按预期工作。但是,我希望客户端能够为当前过滤的结果添加书签,并在以后的某个时间返回到同一页面。这意味着我将需要在某个地方保存有关客户端进行的搜索词的明确信息,通常是URL(是吗?)。因此,我需要使用查询参数更新网址以保存搜索字词(/users?username=joe&page=1)。
我感到困惑的是何时何地更新URL?我现在能想到的是下面的2个选项-它们似乎一点也不干净。
this.props.params
this.props.query
Action.getUser
username=joe&page=1
在这之后,它与上面相同
props
this.props.searchusername
this.props.searchpage
处理查询参数的最佳实践是什么?(或者这可能不是特定于查询参数的)我是否完全误解了设计模式或体系结构?在此先感谢您的支持。
我读过的一些文章
不确定您的意思
这意味着我将需要更新url以保存信息(/ users?username = joe&page = 1)。
您可能会有与此类似的结构。
TopContainer.jsx-Users.jsx-User.jsx的列表
通常,TopContainer将监视所有商店,如果有任何更改,请将其传递给users.jsx。这样,在Users.jsx中,您可以简单地渲染this.props.users,而不必担心任何重新渲染。
搜索用户操作通常发生在TopContainer的componentWillMount事件中,并且您的页面将侦听UserStore。这是抛出任何查询参数的好地方。这样的事情会起作用
componentWillUnmount() { let searchTerm = router.getCurrentQuery().searchTerm; UserActions.searchUsers(searchTerm) },
该页面并不真正在乎url是否具有查询参数,它只是愚蠢地显示用户存储中的任何内容。
然后,当搜索完成时,将重新加载Users.jsx并显示正确的结果