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>useStateh1>
-
- <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)
- }}
- >修改countbutton>
-
- <h3>{person.name}h3>
-
- <button onClick={()=>{
- setPerson({
- name:"zs"
- })
- }}
- >修改Personbutton>
- div>
- )
- }
-
-
-
- const root = ReactDOM.createRoot(document.getElementById("app"))
- root.render(<App/>)