- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 componentDidMount 中获取数据并更新状态,并且出现了著名的警告:
Warning: Can't call setState (or forceUpdate) on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.
我的代码如下:
componentDidMount() {
let self = this;
let apiBaseUrl = Config.serverUrl;
axios.get( apiBaseUrl + '/dataToBeFetched/' )
.then( function(response) {
self.setState( { data: response.data } );;
} );
}
导致此警告的原因是什么?获取数据和更新状态的最佳方法是什么?
最佳答案
根据之前的回答,我做了以下工作,效果很好:
constructor(props) {
this.state = {isMounted: false}
}
componentDidMount() {
let apiBaseUrl = Config.serverUrl;
this.setState( { isMounted: true }, () => {
axios.get( apiBaseUrl + '/dataToBeFetched/' )
.then( (response) => { // using arrow function ES6
if( this.state.isMounted ) {
this.setState( { pets: response.data } );
}
} ).catch( error => {
// handle error
} )
} );
}
componentWillUnmount() {
this.setState( { isMounted: false } )
}
另一个更好的解决方案是在卸载中取消请求,如下所示:
constructor(props) {
this._source = axios.CancelToken.source();
}
componentDidMount() {
let apiBaseUrl = Config.serverUrl;
axios.get( apiBaseUrl + '/dataToBeFetched/', { cancelToken: this._source.token } )
.then( (response) => { // using arrow function ES6
if( this.state.isMounted ) {
this.setState( { pets: response.data } );
}
} ).catch( error => {
// handle error
} );
}
componentWillUnmount() {
this._source.cancel( 'Operation canceled due component being unmounted.' )
}
关于reactjs - 组件DidMount : Can't call setState (or forceUpdate) on an unmounted component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396375/
假设已经定义了所有不同的组件。 在我的 React 组件中,我希望单击按钮触发附加一个新的 TextBox我动态创建的组件 questions成分。当我用 forceUpdate() 测试按钮点击时,
文档对 forceUpdate 的描述如下: Calling forceUpdate() will cause render() to be called on the component, skip
我有以下组件,其中将显示产品列表。 CounterComponent 添加到两个位置,一个在 ProductCatalog 中,另一个在 ProductCard 中,可以在模态中显示。在柜台表示订购的
以非常简单的react.js应用程序为例I created here .. data = note: "" setNote = -> data.note = $('inpu
在 React docs , forceUpdate有一个参数callback . 是不是像 setState设置状态后调用的第二个参数?或者那是为了什么? 我找不到任何关于它的文章。 最佳答案 Is
我可以强制重装对于具有 this.forceUpdate() 的父组件,但是如何为子组件做呢? 即以下 react 类方法: buttonClick = () => { //This updat
我的组件状态保存的数据(片段)看起来像这样: [ { batchId: 1234, ... jobRowData: [
我在整个应用程序的多个组件中使用以下模式。我注意到许多人不鼓励使用 forceUpdate(),有些人甚至称其为 hack。那么如何在不使用它的情况下完成呢? // user.js export de
迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。 比如v-for里面数据层次太多, 修改过数据变了,页面没有重新渲染,需手动强制刷新。
我在控制台中看到这个错误并尝试了很多解决方案都没有用 ExceptionsManager.js:84 Warning: Can't call setState (or forceUpdate) on
我想在用户单击主页按钮时刷新整个页面。我正在使用 thisHOME 它按预期工作,但我有这个错误。知道我为什么得到它吗? Cannot read property 'enqueueForceUpdat
我有一个问题,redux 状态被成功更新,但 react 组件没有重新渲染,经过一些研究我相信 [forceUpdate()][1] 可以解决我的问题,但我是不确定实现它的正确方法,即在 redux
我有这个组件,我想在我的 api 调用后重新呈现。我无法弄清楚为什么在 getWinks 的 api 调用之后,winks-count 确实更新但不在 View 上,除非我刷新。我不应该使用 this
我这周开始学习 VueJS,我正在尝试构建一个笔记应用程序,但遇到了一些问题: NOTES :
我有一个简单的 React 设置,看起来有点像这样: index.js ReactDOM.render(, document.getElementById('root')); App.js expor
Gutentag,伙计们! 卸载组件后,我的应用程序不断收到此错误消息: Warning: Can't call setState (or forceUpdate) on an unmounted c
React 文档说 永远不要直接改变 this.state,因为之后调用 setState() 可能会替换你所做的改变。将 this.state 视为不可变的... 但当我根本不使用 setState
我不确定我这样做是对还是错,但我似乎找到了如何为计算值更新 dom 的所有答案...... 我有这个组件: Vue.component('bpmn-groups', { props: ['gr
当 observable 更新时,Mobx @observer 组件会触发该组件上的 render 或 forceUpdate 吗?当它发生时会触发哪些生命周期方法? render 和 forceUp
我正在 componentDidMount 中获取数据并更新状态,并且出现了著名的警告: Warning: Can't call setState (or forceUpdate) on an unm
我是一名优秀的程序员,十分优秀!