React Hook,便捷且功能强大
useState基础使用
- 1.导入
useState
函数react
- 2.执行这个函数并且传入初始值必须在函数组件中
- 3.[数据,修改数据的方法]
- 4.使用数据修改数据
import {useState} from 'react'
function App () {
//累加运算
const [count,setCount] = useState (0)
return(
<div>
<button onclick={()=setCount (count + 1)}>{count}</button>
</div>
)
}
useState状态的读取和修改
const [count,setCount] = useState(0)
- 1,
useState
传过来的参数,作为count
的初始值 - 2.[count,setCount] 这里的写法是一个
解构赋值
useState
返回值是一个数组- 名字可以自定义吗?->可以自定义保持语义化
- 顺序可以换吗?->不可以的 第一参数就是数据状态,第二个参数就是修改数据的方法
- 3.
setCount
函数 作用:用来修改count,依旧保持不能直接修改原值还是生成一个新值替换原值setCount
(基于原值计算得到的新值)
- 4.
count
和setCount
是一对是绑在一起的setCount
只能用来修改对应的count
值
useState组件更新过程
组件的更新 - 当调用setCount
的时候更新过程
首次渲染
- 首次被渲染的时候组件内部的代码会被执行一次
- 其中
useState
也会跟着执行这里重点注意初始值只在首次渲染时生效
更新渲染 //setCount都会更新
- App组件会再次渲染这个函数会再次执行
useState
再次执行得到的新的count
值不是0而是修改之后的1模板会用新值渲染
重点一句话:
useState
初始值只在首次渲染生效,后续只要调用setCount
,整个app中代码都会执行,此时的count
每次拿到的都是最新值
useState注意事项
-
1.只能出现在函数组件中
-
2.不能嵌套在if/for/其它函数中(react按照hooks的调用顺序识别每一个hook)
let num 1 function List(){ num++ if(num/2==6){ const[name,setName]=useState("cp') } const [list,setList]useState([]) //俩个hook的顺序不是固定的,这是不可以的!!!
-
3.可以通过开发者工具查看hooks状态
useEffect “定义副作用”
这个hook可以代替类组件中的生命周期函数
依赖项控刺副作用的执行时机
- 1.默认状态(无依赖项)
组件初始化的时候先执行一次等到每次数据修改组件更新再次执行 - 2.添加一个空数组依赖项
组件初始化的时候执行一次useEffect(() =>{ console.log('副作用执行了") },[])
- 3.添加特定依赖项
组件初始化的时候执行一次依赖的特定项发生变化会再次执行
function App(){
const[count,setCount]=useState(0)
const [name,setName]useState('zs')
useEffect(()=>{
console.log('副作用执行了')
},[count])
return(
<>
<button onClick=()=>{setCount(count 1)}}>{count)</button>
<button onClick=()=>{setName('cp')}}>{name}</button>
</>
)
}
注意事项
useEffect回调函数中用到的数据(比如,count)就是依赖数据,就应该出现在依赖项数组中,如果不添加依赖项就会有bug出现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通