使用 React Js 根据查询字符串过滤内容
Filtering content based on query string using React Js
我们有一个简单的 React 应用程序。数据来自 api 并存储在状态中。然后我们使用地图函数来渲染数据。并使用排序和过滤功能来操作数据。
现在,我们尝试使用查询字符串将过滤器信息与 URL 相关联。因此,在共享页面 URL 时,过滤数据也会随之传递。
我们正在使用 'react-router-dom' 库的 link 标签更新查询字符串
<Link to='/pagePath?queryStringKey=queryStringValue'> Link Content </Link>
现在,如何监听查询字符串的变化? componentDidMount 运行s 仅在安装组件时执行一次。但是当使用 Link 标记更改查询字符串时,componentDidMount 不会 运行。如果我们从渲染函数中监听,那么它会给出这个错误。
Error: Maximum update depth exceeded.
listen/detect查询字符串更改的正确方法是什么?
您收到该错误的原因是您正在监听渲染函数。 React 挂载、渲染、侦听查询字符串、再次重新渲染、重新挂载、重新侦听等,直到超过最大更新深度
如果 componentDidMount
不起作用,请考虑使用 componentDidUpdate 这将在每次组件更新时更新
您可以使用 getDerivedStateFromProps(props, state) 和 componentDidUpdate 生命周期组件。它接受道具和状态作为参数。它在调用 render 方法之前被调用,无论是在初始挂载时还是在后续更新时。它应该 return 一个对象来更新状态,或者 null 不更新任何内容。 enter link description here
constructor(){
super();
this.state = {
queryStringKey = ''
}
}
static getDerivedStateFromProps(props, state){
let { queryStringKey } = this.props.match.params;
if(queryStringKey !== state.queryStringKey){
return {
queryStringKey: props.queryStringKey
}
}
return null;
}
我们有一个简单的 React 应用程序。数据来自 api 并存储在状态中。然后我们使用地图函数来渲染数据。并使用排序和过滤功能来操作数据。
现在,我们尝试使用查询字符串将过滤器信息与 URL 相关联。因此,在共享页面 URL 时,过滤数据也会随之传递。
我们正在使用 'react-router-dom' 库的 link 标签更新查询字符串
<Link to='/pagePath?queryStringKey=queryStringValue'> Link Content </Link>
现在,如何监听查询字符串的变化? componentDidMount 运行s 仅在安装组件时执行一次。但是当使用 Link 标记更改查询字符串时,componentDidMount 不会 运行。如果我们从渲染函数中监听,那么它会给出这个错误。
Error: Maximum update depth exceeded.
listen/detect查询字符串更改的正确方法是什么?
您收到该错误的原因是您正在监听渲染函数。 React 挂载、渲染、侦听查询字符串、再次重新渲染、重新挂载、重新侦听等,直到超过最大更新深度
如果 componentDidMount
不起作用,请考虑使用 componentDidUpdate 这将在每次组件更新时更新
您可以使用 getDerivedStateFromProps(props, state) 和 componentDidUpdate 生命周期组件。它接受道具和状态作为参数。它在调用 render 方法之前被调用,无论是在初始挂载时还是在后续更新时。它应该 return 一个对象来更新状态,或者 null 不更新任何内容。 enter link description here
constructor(){
super();
this.state = {
queryStringKey = ''
}
}
static getDerivedStateFromProps(props, state){
let { queryStringKey } = this.props.match.params;
if(queryStringKey !== state.queryStringKey){
return {
queryStringKey: props.queryStringKey
}
}
return null;
}