我有组件TopicsView,其中有一个名为ChoosenTopicId的属性,可以在单击按钮时更改它。在此组件中,我有子组件
<TopicViewOnSide TopicId={this.state.choosenTopicId} />
在TopicViewOnSide内部,当我从axios(HTTP GET)发送请求以从服务器获取主题数据,然后组件TopicViewOnSide渲染时,我在componentDidMount()中使用TopicId。我的问题是,当我通过单击TopicView中的按钮来更改ChoosenTopicId时,道具已更改并且很好。但是当更改道具并且我拥有旧的主题数据时,子组件不会重新呈现,因为子组件没有调用componentDidMount(),也没有对服务器的请求。更改道具后,可以通过某种方式调用componentDidMount()方法,以便发送来自axios的请求并更新我的数据吗?
答案 0 :(得分:2)
您正在寻找componentDidUpdate()
,它会在每次状态或道具更改后触发。 componentDidMount()
方法仅运行一次。
您可以执行以下操作:
componentDidUpdate(prevProps){
if(this.props.blaw !== prevProps.blaw){
...execute your logic
}
}
这将创建一项检查,仅在props
更改时才能执行操作。