Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应安全设置状态-反模式还是良好实践?_Reactjs_Asynchronous_React Native_Fetch_Fetch Api - Fatal编程技术网

Reactjs 反应安全设置状态-反模式还是良好实践?

Reactjs 反应安全设置状态-反模式还是良好实践?,reactjs,asynchronous,react-native,fetch,fetch-api,Reactjs,Asynchronous,React Native,Fetch,Fetch Api,我最近遇到了 “只能更新已安装或正在安装的组件。” 在进行异步获取调用后尝试设置状态时出现错误消息。发生这种情况是因为在http响应返回之前卸载了组件 然后我开始用谷歌搜索,找到了解决问题的方法 如果一个变量持有“mounted”状态,并且每次我想要更新状态时,我都会检查该变量,那该怎么办?像safelySetState()函数吗 以下是一个例子: componentDidMount = () => { this._mounted = true; } componentWillUnm

我最近遇到了

“只能更新已安装或正在安装的组件。”

在进行异步获取调用后尝试设置状态时出现错误消息。发生这种情况是因为在http响应返回之前卸载了组件

然后我开始用谷歌搜索,找到了解决问题的方法

如果一个变量持有“mounted”状态,并且每次我想要更新状态时,我都会检查该变量,那该怎么办?像safelySetState()函数吗

以下是一个例子:

componentDidMount = () => {
  this._mounted = true;
}

componentWillUnmount = () => {
  this._mounted = false; 
}

safelySetState = (obj) => {
  if(this._mounted)
    this.setState(obj);
}
然后,每次我想更新状态时,我都会使用this.safelySetState()函数


所以我的问题是:为什么我不应该这样做?为什么React中没有默认设置?

我想React中没有默认设置是因为它超出了他们的范围。如果国家无法设定,他们就不会默默地什么都不做。相反,他们抛出一个错误是合乎逻辑的,所以他们会让你知道这是不可能的,并让你自己决定如何处理它


同时,我也会小心,不要总是出于同样的原因使用你的函数。。。这会使调试你的应用程序变得有点困难和晦涩。。。也许你应该在外部实现它,而不是作为一个函数。。。但是与代码的其余部分内联,并且只针对真正需要它的边缘情况。。。或者至少在组件不可用时记录一条警告

以添加到所提供的答案@andriusain中,当您调用
safelySetState()
并且它没有设置状态时会发生什么?当你的应用程序突然做了一些意想不到的事情,因为它认为某个状态被设置了,而实际上并没有设置时,你试图“绕过”一个错误,这是在制造其他问题。