javascript - (React) 动态组件条件setstate
问题描述
我正在尝试创建一个动态组件,该组件将数据索引与我通过路由器获得的 URL 参数 blogID 匹配。
这里我有路由器参数并将道具发送到组件
<Route path='/blog/:blogId/:blogTitle' render={() => <BlogPost blogData={this.state.blogData} /> } />
然后在组件上设置初始状态并尝试渲染与数据索引匹配的数据,但我收到组件重复调用 setstate 和无限循环的错误。
constructor(props){
super(props);
this.state = {
blogId:'',
blogTitle:'',
blogData:[]
}
}
render(){
const { params:{ blogId, blogTitle } } = this.props.match;
// so i map here to get the index and set the conditional to set the new state but I don't know where or how exactly
this.props.blogData.map((val, idx) => (
idx == blogId ?
this.setState({blogData:val }) : null
))
return (
<div>
<BlogView title={this.state.blogData.title} />
</div>
)
}
解决方案
你得到一个在你的渲染方法中调用 setState 的无限循环的原因,这会导致重新渲染,这会导致 setState,这会导致重新渲染......等等。
尝试将这部分移出渲染方法。
this.props.blogData.map((val, idx) => (
idx == blogId ? this.setState({blogData:val }) : null ))
推荐阅读
- python - Python 将字典转换为数据框并将其导出到 csv 文件
- html - 反应不从网络源渲染我的图像
- spring - jhipster中的“这个实体是关系的所有者是什么意思”是什么意思
- prolog - 将目标作为参数传递?加上可变数量的参数?
- classification - 分类错误率决策可以小于0吗?什么时候它会正好是 0?
- .net - HTTP 错误 500.30 - ANCM 进程内启动失败 - 我在 IIS 服务器上本地部署 .NET Core 3.1 项目
- bash - 当包含在函数中时,bash extglob 模式匹配会中断
- python - Subprocess.run 和未知数量的文件,如何?
- javascript - onbeforeunload 在 Chrome 上的工作方式与在 Firefox 上的工作方式不同。我正在寻找任何潜在的替代品
- elasticsearch - 使用 ngram 分析器获取脏结果以进行高亮搜索