【发布时间】:2020-07-11 08:41:12
【问题描述】:
我目前正在将表格保存到this.state,如您在此处看到的那样
this.setState({
table:
<div id='link-table' className="table-panel-table" style={{ width: "100%" , height: height - 35, overflow:'auto' }}>
{columns}
{rows}
</div>
});
然后在渲染函数中直接使用table变量在网站上显示:
render(){ return (this.state.table) }
(如果由于某种原因这是一个坏主意,请告诉我)
我目前遇到的问题是,当您单击其中一个单元格时,我想将其转换为输入字段(显然是其上方的表单元素)。
我想知道如何最好地更改this.state.table,以便在我更改单元格时它会触发重新渲染。
如果我用这个就不行了
this.state.table.props.children[1][row].props.children[cell].props.children = form_element;
据我了解,我需要使用this.setState() 进行相应更改,但我很难编写代码来定位this.state.table 中的特定嵌套变量。
我去
const { table } = this.state;
let temp_table = {...table, props: {...table.props, children: [...table.props.children]}}
但后来卡住了,因为我不知道如何继续.children[1][row]
【问题讨论】:
-
您是否考虑过仅将数据存储在状态中,在渲染函数中计算 JSX,然后您只需要存储额外的状态来切换输入元素。有条件地渲染 JSX 比尝试更新存储在状态中的深层嵌套 JSX 容易得多(我不知道为什么人们会想要这样做),这可能是动态的。
-
你知道
.children[1][row]的值吗? -
@AaminKhan imgur.com/a/GHAszcn 这是表格的截图。如果这就是您的意思,下一个变量又是“道具”。
-
@DrewReese 实际上可能是一个更好的主意
标签: javascript reactjs render setstate