**我会先发布代码,然后解释我以后遇到的问题。
class ParentComponent extends Component {
constructor() {
super()
this.state = {
id: null,
}
}
render() {
const dataTarged = "#col" + id
const id = "col" + id
return (
<React.Fragment>
<div>
<button data-toggle="collapse" data-target={dataTarged} onClick={() => this.setState({ id: <<this id may vary>> })}>Click me</button>
</div>
<div className="collapse mt-4" id={id}>
<ChildComponent id={this.state.id} />
</div>
</React.Fragment>
)
}
}
class ChildComponent extends Component {
componentDidUpdate(prevProps) {
if (this.props.id != prevProps.id) {
//do stuff with the ID
}
}
}
解释:
- 在 ParentComponent 我有那个折叠,在那个折叠上我使用 this.state.id (可能会有所不同)传递 ID。
- 单击时的那个按钮也会切换折叠并显示 ChildComponent 及其道具。
设想:
- ParentComponent 是“卡片”,我有多个具有不同 ID 的组件。
- 每当我单击按钮时,状态都会使用来自 ParentComponent 的新 ID 进行更新,并作为 props 传递给 ChildComponent。
我面临的问题:
如果我切换不同的 ParentComponents,则 ChildComponent 中的 componentDidUpdate 停止被调用并且 ID 不会更新。这意味着我需要使用该 ID 获取的信息不正确。
此外, ChildComponent 上的 render() 没有被调用,似乎因为它渲染了一次它不会再次渲染。
这就是问题所在,每次传递给 ChildComponent 的道具发生变化时都不应该调用 componentDidUpdate 吗?每次切换不同的 ParentComponent 时,我都会更改传递的道具。
提前谢谢,我希望我说清楚了