在组件生命周期中,我应该在什么时候从URL获取查询参数



我使用的是React 16.4.1、React Router 4.3.1和React Redux 5.0.7。我有一个搜索路线,可以接收这样的查询参数:

https://example.com/search?q=foo

需要明确的是,React Router 4停止了对location.query的支持,因此我们不得不手动解析React Routeer提供的location.search道具中的查询参数。为此,我们可以使用类似Javascript的URLSearchParams接口。

因此,我希望用户能够访问上面的URL,并立即开始搜索"foo"。因此,我需要在页面加载期间的某个时刻收集q参数。但什么时候?

我的第一反应是让Search组件在其componentDidMount生命周期挂钩期间解析查询参数。这恰好也是从服务器检索数据的推荐挂钩,如果q参数有值,我会这样做。

但我也考虑过将组件外的逻辑完全转移到通常在页面加载时运行的JS文件中,比如我的应用程序的index.js文件。我可以访问那里的Redux存储,并可以使用"searchText"更新应用程序状态,然后我的Search组件可以在安装过程中简单地检查该道具(通过Redux连接(。

在页面加载时从URL收集查询参数,然后对其采取行动,这对React开发人员来说是一个相对较新的问题,因为React Router在版本4之前就为我们处理了这个问题。但我肯定不是自第4版发布以来第一个不得不这样做的人。是否有既定的模式或最佳实践?

谢谢。

我的方法是创建一个初始化文件夹以及操作、减速器等

export default (dispatch, getState) => {
dispatch(urlQueryParams());
// Some other initializers
};
const urlQueryParams = () => {
// return json to reducer with the params
}

然后在你的主索引文件上,你可以触发它

import addQueryParamsInitialzer from 'redux/initialize/queryParam';
const store = configureStore(INITIAL_STATE);
addQueryParamsInitialzer(store.dispatch, store.getState);

这样,无论你在上使用什么组件,你都会把它放在你的商店里

最新更新