【发布时间】:2019-06-27 21:53:25
【问题描述】:
作为新手,我看到了一个类似的例子,但没有清楚地解释它们,我不明白如何解决这个问题。我有一个 API,新数据发布到 API。
ComponentDidMount() 将首次从 API 发起数据。
我浏览了文档,发现如果添加了新数据,componentDiUpdate() 将始终重新呈现页面。
这是我目前的代码:
constructor(props){
super(props);
this.state = {
newData: [],
dataApi: this.props.getAllData() //method that is using GET_ALL_DATA actions/reducers using fetch(get)
}
}
// it gets the data
componentDidMount() {
this.state.dataApi
}
componentDidUpdate(prevProps, prevState){
this.state.dataApi.then(data => {
if(prevProps.data != this.props.data) {
this.setState({newData: data});
}
}
}
ComponentDidUpdate() 错误:
无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请在 componentWillUnmount 方法中取消所有订阅和异步任务。
我该如何解决这个问题?通过在有人发出发布请求时从 API 获取新数据?谢谢
【问题讨论】:
-
听起来就像当您离开浏览器页面时,您的组件在卸载组件后仍在尝试设置状态。
-
@JohnRuddell 我认为我的做法是错误的,因为代码不起作用,我无法通过调用 this.state.dataApi 从 api 获取更新的数据
-
是的,你不应该对你的状态做出这样的承诺,只需在 didMount 中调用
getAllData()并将.then也链接到那里。但是如果这个组件绑定到一个网页,你需要记住,如果组件卸载,你需要在你的 Promise 中终止 setstate 调用然后回调
标签: javascript reactjs