useState传入函数

119 阅读1分钟

useState传入普通变量, 每次组件更新都会执行

useState传入函数,只在组件渲染时执行一次

适合数据结构复杂, 计算成本高的场景

import React, { FC, useState } from 'react'

function genArr() {
    console.log('genArr...')
    const arr = new Array(100)
    arr.fill('hello')
    return arr
}

const Demo: FC= () => {
    console.log('demo...')
    // const [arr, setArr] = useState(['a','b','c'])
    const [arr, setArr] = useState(genArr)
    
    function addStr() {
        setArr([...arr, 'hello'])
    }
    
    return(
        <>
           <p>length {arr.length}</p>
           <div>
               <button onClick={addStr} ></button>
           </div>
        </>
    
    )
    
}


我们会发现genArr...只会打印两次, 即只会在函数渲染时执行一次(还有一次是开发环境下默认执行的),大大减少了重复计算