Javascript 使用react router v4添加或更新查询参数,无需重新呈现主组件
假设我们有一个React应用程序,其入口点如下所示:Javascript 使用react router v4添加或更新查询参数,无需重新呈现主组件,javascript,reactjs,react-router,Javascript,Reactjs,React Router,假设我们有一个React应用程序,其入口点如下所示: import React from 'react'; import ReactDOM from 'react-dom'; import { BrowserRouter } from 'react-router-dom'; import Application from './Application'; ReactDOM.render(( <BrowserRouter> <Application
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import Application from './Application';
ReactDOM.render((
<BrowserRouter>
<Application />
</BrowserRouter>
), document.getElementById('root'));
从“React”导入React;
从“react dom”导入react dom;
从“react router dom”导入{BrowserRouter};
从“./Application”导入应用程序;
ReactDOM.render((
,但使用该方法会导致重新呈现应用程序
有没有可能在不重新呈现应用程序
的情况下添加或更新查询参数?我发现我可以在不重新呈现应用程序
的情况下更改查询参数,但这感觉像是一种黑客行为。我目前正在阅读一本关于react的书,并且也有同样的问题
我发现您需要向父组件添加shouldComponentUpdate方法,并验证location.search值是否不同
this.props.location.search!==nextrops.location.search
从该验证返回true将重新呈现组件
附言。
这本书使用的是React Router v3,所以我很难更新整个应用程序和嵌套路由
p.p.S。
我现在使用的是React Router之外的历史包,我觉得这不是一个黑客行为,而是一个可行的解决方案。包装的历史是用来重新渲染的,我不认为它们提供了一个无声的选项,在我看来这只是一个未包装的历史。我认为这是一个黑客行为,因为这样做会导致React Router的历史和位置
不更新的对象。这些对象可能很有用。实际上,我现在遇到了一种情况,从中读取它们会很有用。在本例中,应用程序
没有任何道具。但您更广泛的观点是正确的:我可以实现shouldComponentUpdate
或使应用程序
成为 PureComponent
,这将阻止它在任何道具更改之前重新渲染。这实际上可能是一个比使用历史API更干净的解决方法,我很感激这一建议。不过,我想知道react router是否有办法在不重新渲染所有内容的情况下更改查询参数,就像历史API有办法更改一样查询参数而不重新加载。