Reactjs 如何更新match.params?
react应用程序具有搜索页面。这里有输入。 路径是“search/:query”,默认情况下,您将看到零个结果。 如果您转到“搜索/星球大战%20”,您将看到一些结果。在Reactjs 如何更新match.params?,reactjs,search,react-router-dom,Reactjs,Search,React Router Dom,react应用程序具有搜索页面。这里有输入。 路径是“search/:query”,默认情况下,您将看到零个结果。 如果您转到“搜索/星球大战%20”,您将看到一些结果。在componentDidMount()中,我添加了if语句,以在匹配时加载结果。params.query不为空 如果我键入搜索输入蜘蛛侠并单击提交-我将触发搜索并显示结果。但如果你重新加载页面,你会看到关于《星球大战》的结果。那么如何更新match.params.query呢?或者可能有其他解决办法来解决这个问题 @misha
componentDidMount()
中,我添加了if语句,以在匹配时加载结果。params.query不为空
如果我键入搜索输入蜘蛛侠并单击提交-我将触发搜索并显示结果。但如果你重新加载页面,你会看到关于《星球大战》的结果。那么如何更新match.params.query呢?或者可能有其他解决办法来解决这个问题 @misha来自lviv我认为您的问题陈述有两个真实来源,一个是查询参数,您应该使用它更新您的状态,另一个是默认状态,它由过滤器的默认值填充
正如@Akash bhandwarkar所建议的,您确实需要在使用中更新路由。但是,您还需要一个用于应用程序状态的顶级orchestrator,它将允许您读取和写入历史api(更改路由),并为您执行XHR/fetch以获得结果
我的方法是从父组件开始,即FiltersContainer,它实际上执行这个编排来读取和写入url。这个容器将具有获取和更新路由的所有副作用知识(包括错误处理)。现在,所有子组件(过滤器和搜索结果可能)将只读取这样编排的状态并重新呈现
希望这能引导你的思考。如果您需要进一步指导,请在此处回复 您还需要更新历史对象 您所做的是更改可用的历史对象,并基于该对象计算结果。但是当您刷新页面时,它仍然保存原始历史对象 一种方法是,您需要推送或替换历史记录中的新路线。 因为evert搜索页面是一个新页面,所以如果要保留以前的页面,应使用history.push或history.replace 这样实施:
var routeObj = {
pathname: samePath,
state: sameState,
query: newQuery
}
//push it in your history using which ever routing library you are using.
//For Example:
router.history.replace(routeObj);
注意:不要担心更改历史记录时的渲染速度。React足够聪明来处理这个问题。基本上,当你推送一个已经挂载了组件的路由时,它不会再次卸载和重新挂载相同的组件,而只是改变道具并重新渲染。
这种情况下的回调将是=>componentWillReceiveProps添加一些代码,这样我们可以更好更快地帮助您