如何仅使用 React Native 中的 if 语句返回 useEffect

Posted

技术标签:

【中文标题】如何仅使用 React Native 中的 if 语句返回 useEffect【英文标题】:How to return a useEffect with only if statements in React Native 【发布时间】:2021-08-25 09:05:45 【问题描述】:

当我进入页面时,我正在使用 useEffect 来定义变量值,但有时我会收到以下警告:

警告:无法对未安装的组件执行 React 状态更新。 这是一个空操作,但它表明您的应用程序中存在内存泄漏。 要修复,请取消 useEffect 中的所有订阅和异步任务 清理功能。

这是我的 useEffect 函数代码:

useEffect(() => 
        if(hierarchy == '1')
            setJob('Investigador')
        
        if(hierarchy == '2')
            setJob('Administrador')
        
        if(hierarchy == '0')
            setJob('Novo Utilizador')
        
, [])

我知道我应该在函数中返回一些东西来清理它,但由于我只使用 if 而不是 const,我怎样才能返回才能没有这个错误?

【问题讨论】:

【参考方案1】:

在应用中设置状态时,您应该使用清理功能。 考虑使用'mounted' 变量来判断它是否应该跳过对 setState 的调用。

    import React,  useEffect, useState, useRef  from "react";
    
    //inside component:
    const mounted = useRef(true);
    useEffect(() => 
    mounted.current = true;
     if (mounted.current) 
            if(hierarchy == '1')
                setJob('Investigador')
            
            if(hierarchy == '2')
                setJob('Administrador')
            
            if(hierarchy == '0')
                setJob('Novo Utilizador')
            
    
     return () => (mounted.current = false);
    , [])

【讨论】:

我可以将它用于每个类似的 useEffect 函数吗? 是的,你可以用这个! 请查看更新后的答案。我忘了加if (mounted.current)

以上是关于如何仅使用 React Native 中的 if 语句返回 useEffect的主要内容,如果未能解决你的问题,请参考以下文章

React Native 中的 iPad 数字键盘

使用 react-native-splash-screen 时如何重构 AppDelegate.m 以仅加载应用程序一次?

如何将处于新状态的json对象中的特定数据保存到react native中

如何仅在特定屏幕(例如主屏幕)上启用抽屉导航 [react native] [react navigation]

在React native 如何写if判断和for循环

React Native应用仅允许Google Play商店中的410个设备