gpt4 book ai didi

javascript - 在父组件上调用 setstate 会强制其子组件执行 componentDidUpdate 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:40:53 24 4
gpt4 key购买 nike

我有两个组件,父组件 App 和子组件 SearchBar,我希望 SearchBar 保持自己的状态,并在更新其状态后调用其父组件提供的函数作为将更新其父状态的 prop。

所以在我的 SearchBar 组件上有

onSearchChange(event) {
.
.
.
this.setState({ searchTerm });

}

然后

componentDidUpdate(){
this.props.onSearchChange(this.state.searchTerm)
}

在父组件上

onSearchChange(searchTerm){
this.setState({searchTerm});
}
render() {
return (
<div className="App">

<div>
<SearchBar onSearchChange={this.onSearchChange}/>
</div>
.
.
.
</div>
);
}

但这会导致无限循环,其中 SearchBar 的 componentDidUpdate 被调用,它调用其父级 onSearchChange 来更新父级状态,然后 SearchBar 的 componentDidUpdate 再次被调用等等。

如果我在 setState 中使用回调而不是 componentDidUpdate 来更新其父状态,它可以正常工作,但我只是不明白为什么 SearchBar 在它的 prop 是常量的情况下会更新。

最佳答案

componentDidUpdate 提供了两个参数 prevProps 和 prevState,通过它你可以检查实际的 props 或 state 是否发生了变化,然后对当前 state/props 进行更改。例如:

componentDidUpdate(prevProps, prevState){
if(prevState.searchTerm !== this.state.searchTerm) {
this.props.onSearchChange(this.state.searchTerm)
}
}

关于javascript - 在父组件上调用 setstate 会强制其子组件执行 componentDidUpdate 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com