代码之家  ›  专栏  ›  技术社区  ›  Matt

React中只运行一次函数

  •  0
  • Matt  · 技术社区  · 4 年前

    const randomID = Math.floor(1000 + Math.random() * 9000);
    const generateID = text => {
        return text.replace(/\s+/g, '-') + '-' + randomID;
    };
    

    我考虑过使用useEffect,但它似乎运行不正确:

    useEffect(() => {
        const randomID = Math.floor(1000 + Math.random() * 9000);
    },[]);
    

    如何确保randomID编号只运行一次,保证randomID编号只在组件加载时运行,而不是每次组件加载时运行?

    2 回复  |  直到 4 年前
        1
  •  3
  •   Agustin Moles    4 年前

    在里面用没关系 useEffect

    const [randomID, setRandomID] = useState(null);
    
    useEffect(() => {
        setRandomID(Math.floor(1000 + Math.random() * 9000));
    },[]);
    
        2
  •  1
  •   Linda Paiste    4 年前

    你可以利用 useMemo

    const randomId = useMemo(() => {
        return Math.floor(1000 + Math.random() * 9000);
    },[]);
    

    但要知道,这并不是百分之百完美的:

    您可以依赖useMemo作为性能优化,而不是语义保证。将来,React可能会选择忘记一些以前记下的值,并在下次渲染时重新计算这些值,例如释放屏幕外组件的内存。编写代码,使其在没有useMemo的情况下仍然可以工作,然后添加它以优化性能。