在父组件中更改道具后如何更新子组件

时间:2019-06-14 23:07:40

标签: reactjs

我有组件TopicsView,其中有一个名为ChoosenTopicId的属性,可以在单击按钮时更改它。在此组件中,我有子组件

<TopicViewOnSide TopicId={this.state.choosenTopicId} />

在TopicViewOnSide内部,当我从axios(HTTP GET)发送请求以从服务器获取主题数据,然后组件TopicViewOnSide渲染时,我在componentDidMount()中使用TopicId。我的问题是,当我通过单击TopicView中的按钮来更改ChoosenTopicId时,道具已更改并且很好。但是当更改道具并且我拥有旧的主题数据时,子组件不会重新呈现,因为子组件没有调用componentDidMount(),也没有对服务器的请求。更改道具后,可以通过某种方式调用componentDidMount()方法,以便发送来自axios的请求并更新我的数据吗?

1 个答案:

答案 0 :(得分:2)

您正在寻找componentDidUpdate(),它会在每次状态或道具更改后触发。 componentDidMount()方法仅运行一次。

您可以执行以下操作:

componentDidUpdate(prevProps){ 
   if(this.props.blaw !== prevProps.blaw){
     ...execute your logic 
   }
} 

这将创建一项检查,仅在props更改时才能执行操作。