reactjs - React Native:如何防止在未挂载的组件上更新状态导致的内存泄漏。状态在收到api响应后更新?
问题描述
下面的解决方案实际上是在防止 react-native App 上的内存泄漏还是只是隐藏警告?
除了下面的解决方案之外,是否还有其他解决方案可以解决此问题。
我找到了一种防止 API 响应状态更新的方法。通过使用 useRef 如下
const _isMounted = useRef(true); // Initial value _isMounted = true
useEffect(() => {
_isMounted.current = true;
return () => {
_isMounted.current = false;
}
}, []);
const onResponse = () => {
if (_isMounted.current) {
setResponse(data);
}
}
有没有其他解决方案来解决这个问题?我使用 redux-saga 来处理 API。
在 redux-saga 中,我传递了一个回调。该代码给我一个警告状态在卸载后更新
const [isSubmitting, setSubmitting] = useState(false); // this state is used to disable submit button and show loader
props.saveData({
token: props.login_token,
setSubmitting: setSubmitting,
data: data
});
解决方案
props.saveData({
token: props.login_token,
setSubmitting: (flag)=>{
if(_isMounted.current){
setSubmitting(flag);
}
},
data: data
});
我发现的另一个解决方案是取消 Axios,但我不想取消 POST 操作。
解决方案
推荐阅读
- java - 如何在序列化 Avro 消息时传递 Null 值
- git - github上的SSH项目给出问题
- c - DLL 导出不带 DEF 文件的 __stdcall 并使用 VS 修饰函数名
- android - 华为地图不加载瓷砖
- python-3.x - 芹菜任务和python函数一起调试
- python - 由 Crontab 运行时,Python 脚本无法按预期工作
- reactjs - 如何在 React js 中提交表单?
- javascript - html,head和body元素之间的父子关系?
- spring-boot - 单点登录重定向不适用于 Spring Security Oauth
- android - 在智能 pos 打印机上反应原生包的工作