javascript - 更改道具时反应子组件不重新渲染
问题描述
我正在做一个简单的待办事项应用程序,我尝试根据单击的注释的id呈现EditComponent,以便我可以在编辑注释表单中填充现有详细信息。我将活动笔记 ID 存储在Parent's state中。首次渲染EditComponent时,它按预期工作。但是,当我使用setState更改id时,现有的渲染不会使用新的注释详细信息进行更新。这是在单击特定笔记的编辑按钮时执行的功能
setEditState = id => {
this.setState({id,isEdit:true})
}
这是我的父渲染()
render() {
let form;
if(this.state.isEdit){
form = <EditComponent id={this.state.id} />
}
else{
form = <AddComponent />
}
return (
<div className="App">
<ViewComponent notes={this.state.notes} setEditState={this.setEditState} deleteNote={this.deleteNote} />
{form}
</div>
);
}
这是我填充EditComponent状态的地方。
async componentDidMount(){
const note = await this.getNote(this.props.id)
console.log(note.data.subject)
this.setState({
id:this.props.id,
modifiedSubject: note.data.subject,
modifiedNote: note.data.noteText
})
}
这是子渲染()中编辑表单中的输入之一
<input className="form-control" type="text" onChange={this.handleSubject} value={this.state.modifiedSubject} />
我的预感:因为我使用的是componentDidMount() ,所以我没有一次又一次地更新它吗?如果是这样,当传递给孩子的道具发生变化时,是否有任何生命周期方法执行?
提前致谢
解决方案
你必须使用UNSAFE_componentWillReceiveProps()
它。
推荐阅读
- julia - 当我已经更新时,Julia 的 Pluto 一直想要更新。这是一个错误吗?
- php - PHP:从同一个表单中获取多个值
- python-3.x - 我们可以在对角线上绘制非线性数据点吗?
- google-apps-script - Google Sheet 自定义函数:将单元格地址作为参数传递
- spring-batch - Spring Batch:如何在追加文件并且没有要写入的项目时写入文件头
- python-3.x - 查找已经在列表中的列表元素
- java - 无法使用 Java Spring 和 iBatis 连接到本地 SQL 服务器
- javascript - 为什么 Glide.js 在与 Bootstrap 4 模态一起使用时不能正常工作?
- python - 由于缺少通过 TEST_DATA_DIR 配置的测试数据,找不到 Pytest 夹具
- swiftui - 如何在 SwiftUI 中使用导航视图更改状态栏外观