useState与useEffect

react中组件分为有状态组件(类组件)和(无状态组件)函数式组件,函数式组件没有状态和生命周期,但是可以通过通过useState useEffect等hook语法添加状态和生命周期函数;

vue3的setup是组合式api的入口,其中使用的useRouter useRoute useStore 也称为hook写法;

 1.useState

导出useState函数:const {useState} = React

定义状态的语法:let [state,修改函数] = useState(初始值)

使用:{state};

修改:修改函数(修改后结果)

const {useState} = React  // 导出useState函数

// 函数式组件
const App = ()=>{
    // 定义状态的语法:let [state,修改函数] = useState(初始值)
    // state 可以自定义
    // 修改函数 命名setA、setB
    // 定义状态num1 并且修改方法为setNum1
    let [num,setNum] = useState(6666)

    // 引用类型的状态
    let [person,setPerson] = useState({name:"张三"})


return(
    <div>
        <h1>useState</h1>
        
        <h3>{num}</h3>

        <button onClick={()=>{
            setNum(100)
        }}>点击修改num1
        </button>

        <button onClick={()=>{
            setNum(num+100)
        }}>点击增加num1
        </button>

            <h3>{person.name}---{person.age}</h3>

            <button onClick={()=>{
            setPerson({
                name:'李四',
                age:67
            })
        }}>点击修改
        </button>
    </div>

)
}


const root = ReactDOM.createRoot(document.getElementById("app"))
root.render(<App/>)

2. useEffect

useEffect:

第一种情况:只有一个回调函数参数相当于didMount+didUpdate,并且可以有返回值的;

return 返回是一个钩子函数相当于 willUnmount卸载钩子;

第二种请求 参数1是箭头回调函数,参数2是空数组,相当于didMount 但是只初始化执行一次;

第三种情况 参数1是箭头回调函数 参数2是数组的元素是状态,在初始化走一次,监听第二个参数中的发生变化时候走一次;

const {useState,useEffect} = React
const App = ()=>{
    // 设置查找dom节点
    let ref1 = null
    let [count,setCount] = useState(10)
    let [person,setPerson] = useState({name:'张三'})
    // 只有参数1箭头函数回调
    useEffect(()=>{
        console.log("1-didMount+didUpdate")
        // 可以在此处发请求和获取DOM ,但是数据更新的话会再次执行
        ref1.style.color="red" //成功更改颜色
        return ()=>{
            // 可以清除定时器等
            console.log("相当于 willUnmount卸载钩子")
        }
    })

    // 参数2为空数组,只会在第一次绑定dom元素执行一次,相当于didMount
    useEffect(()=>{
        console.log("2-didMount")
        // 可以在此处发请求和获取DOM
    },[])

    // 参数2数组不为空,数组元素的是一个状态,类似于watch监听到count变化的时候调用
    // 初始化也会走一次,目的为了指定监听谁的
    // 监听属性发生变化的时候, 也会触发改钩子
    useEffect(()=>{
        console.log("3---监听第二个数组中的状态")
    },[count])
    return(
            <div>
                <h3 ref={el=>ref1=el}>{count}</h3>
                <button onClick={()=>{
                    setCount(999999)
                }}
                >修改count</button>

                <h3>{person.name}</h3>

                <button onClick={()=>{
                    setPerson({
                        name:"zs"
                    })
                }}
                >修改Person</button>
            </div>
    )
}



const root = ReactDOM.createRoot(document.getElementById("app"))
root.render(<App/>)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值