javascript - 使用包含状态变量的 .map 渲染数组 - 不更新
问题描述
我有一个要在 render() 函数上渲染的数组。数组中的每个元素都是一个 HTML 元素,它具有我需要显示的状态变量,HTML 正确显示,但即使在渲染发生时内部状态变量也不会更新
state = {
array: [],
id: 2
}
updateState() {
this.setState({id: 4})
}
componentDidMount(){
array = [<div> {this.state.id} </div>, <div> {this.state.id} </div>]
}
render() {
{this.state.array.map(el => return el)}
//assume something happens here that triggers updateState() multiple times: buttons presses, etc
}
我从没见过 4,它重新渲染但保留旧值 2
解决方案
您需要保存数据并再次渲染:
state = {
id: 2
}
updateState() {
this.setState({id: 4})
}
componentDidMount(){
this.getElements(this.state.id)
}
getElements = (id) => {
return [<div> {id} </div>, <div> {id} </div>]
}
render() {
{this.getElements(this.state.id).map(el => el)}
//assume something happens here that triggers updateState() multiple times: buttons presses, etc
}
推荐阅读
- bash - 使用 bash 从根据请求生成文件的链接下载 tsv 文件
- oracle - Web 源模块 POST 请求 Oracle APEX 的问题
- c - C语言中的Havel-Hakimi算法
- mysql - 对远程数据库 mariadb 的查询比在同一台服务器上的查询要慢
- .net - 在 .net 核心中使用 dapper 进行递归查询
- angular - Angular 13 和 Bootstrap 5 | 添加路由时 UI 消失
- mysql - Nodejs mysql使用列名作为变量
- javascript - Chart.js 版本 3 编译错误:您可能需要适当的加载程序来处理此文件类型
- android - 您需要在此活动中使用 Theme.AppCompat 主题(或后代) - 找不到问题
- c++ - asio 自定义异步函数和 c++20 协程