• useState与useEffect


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

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

     1.useState

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

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

    使用:{state};

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

    1. const {useState} = React // 导出useState函数
    2. // 函数式组件
    3. const App = ()=>{
    4. // 定义状态的语法:let [state,修改函数] = useState(初始值)
    5. // state 可以自定义
    6. // 修改函数 命名setA、setB
    7. // 定义状态num1 并且修改方法为setNum1
    8. let [num,setNum] = useState(6666)
    9. // 引用类型的状态
    10. let [person,setPerson] = useState({name:"张三"})
    11. return(
    12. <div>
    13. <h1>useStateh1>
    14. <h3>{num}h3>
    15. <button onClick={()=>{
    16. setNum(100)
    17. }}>点击修改num1
    18. button>
    19. <button onClick={()=>{
    20. setNum(num+100)
    21. }}>点击增加num1
    22. button>
    23. <h3>{person.name}---{person.age}h3>
    24. <button onClick={()=>{
    25. setPerson({
    26. name:'李四',
    27. age:67
    28. })
    29. }}>点击修改
    30. button>
    31. div>
    32. )
    33. }
    34. const root = ReactDOM.createRoot(document.getElementById("app"))
    35. root.render(<App/>)

    2. useEffect

    useEffect:

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

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

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

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

    1. const {useState,useEffect} = React
    2. const App = ()=>{
    3. // 设置查找dom节点
    4. let ref1 = null
    5. let [count,setCount] = useState(10)
    6. let [person,setPerson] = useState({name:'张三'})
    7. // 只有参数1箭头函数回调
    8. useEffect(()=>{
    9. console.log("1-didMount+didUpdate")
    10. // 可以在此处发请求和获取DOM ,但是数据更新的话会再次执行
    11. ref1.style.color="red" //成功更改颜色
    12. return ()=>{
    13. // 可以清除定时器等
    14. console.log("相当于 willUnmount卸载钩子")
    15. }
    16. })
    17. // 参数2为空数组,只会在第一次绑定dom元素执行一次,相当于didMount
    18. useEffect(()=>{
    19. console.log("2-didMount")
    20. // 可以在此处发请求和获取DOM
    21. },[])
    22. // 参数2数组不为空,数组元素的是一个状态,类似于watch监听到count变化的时候调用
    23. // 初始化也会走一次,目的为了指定监听谁的
    24. // 监听属性发生变化的时候, 也会触发改钩子
    25. useEffect(()=>{
    26. console.log("3---监听第二个数组中的状态")
    27. },[count])
    28. return(
    29. <div>
    30. <h3 ref={el=>ref1=el}>{count}h3>
    31. <button onClick={()=>{
    32. setCount(999999)
    33. }}
    34. >修改countbutton>
    35. <h3>{person.name}h3>
    36. <button onClick={()=>{
    37. setPerson({
    38. name:"zs"
    39. })
    40. }}
    41. >修改Personbutton>
    42. div>
    43. )
    44. }
    45. const root = ReactDOM.createRoot(document.getElementById("app"))
    46. root.render(<App/>)

  • 相关阅读:
    前端 javascript 基础常见面试题
    敏感信息防泄漏:透明加密与通信内容安全策略深度解析
    npm install webpack 下载失败
    CLION配置CUDA环境
    红黑树详解
    Linux命令-用户、权限管理
    数据可视化系列教程之组件通信
    MySQL数据库:开源且强大的关系型数据库管理系统
    【备忘】navicat mysql导入导出小经验
    【Ajax】关于Ajax那些事儿~
  • 原文地址:https://blog.csdn.net/weixin_48879122/article/details/127802825