当前位置: 首页 > news >正文

react hooks学习记录

react hook学习记录

  • 1.什么是hooks
  • 2.State Hook
  • 3.Effect Hook
  • 4.Ref Hook

1.什么是hooks

(1). Hook是React 16.8.0版本增加的新特性/新语法
(2). 可以让你在函数组件中使用 state 以及其他的 React 特性

貌似现在更多的也是使用函数式组件的了,重要

2.State Hook

import React from 'react'
function Demo(){//console.log('Demo');const [count,setCount] = React.useState(0)//加的回调function add(){//setCount(count+1) //第一种写法setCount(count => count+1 )}return (<div><h2>当前求和为:{count}</h2><button onClick={add}>点我+1</button></div>)
}export default Demo

React.useState()可以使得函数式组件也能类似于类式组件使用操作state了

(1). 语法: const [xxx, setXxx] = React.useState(initValue)
(2). useState()说明:
参数: 第一次初始化指定的值在内部作缓存
返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的函数
(3). setXxx()2种写法:
setXxx(newValue): 参数为非函数值, 直接指定新的状态值, 内部用其覆盖原来的状态值
setXxx(value => newValue): 参数为函数, 接收原本的状态值, 返回新的状态值, 内部用其覆盖原来的状态值

3.Effect Hook

(1). Effect Hook 可以让你在函数组件中执行副作用操作(用于模拟类组件中的生命周期钩子)
(2). React中的副作用操作:
发ajax请求数据获取
设置订阅 / 启动定时器
手动更改真实DOM

我理解的就是effect hook让函数式组件能在原本没有过的特定的生命周期中执行操作。

语法和说明:
useEffect(() => {
// 在此可以执行任何带副作用操作
return () => { // 在组件卸载前执行
// 在此做一些收尾工作, 比如清除定时器/取消订阅等
}
}, [stateValue]) // 如果指定的是[], 回调函数只会在第一次render()后执行

第二个参数不传的话

import React from 'react'
function Demo(){//console.log('Demo');const [count,setCount] = React.useState(0)React.useEffect(()=>{console.log('###')// let timer = setInterval(()=>{// 	setCount(count => count+1 )// },1000)// return ()=>{// 	clearInterval(timer)// }})//加的回调function add(){//setCount(count+1) //第一种写法setCount(count => count+1 )}return (<div><h2>当前求和为:{count}</h2><button onClick={add}>点我+1</button></div>)
}export default Demo

在这里插入图片描述
React.useEffect相当于在第一次更新完成和数据更新的时候会被调用
如果传的是空数组,
在这里插入图片描述
相当于只有在第一次更新完成才会触发
如果数组中传了参数,例如例子中的count
在这里插入图片描述

在这里插入图片描述
React.useEffect相当于在第一次更新完成和数据count更新的时候才会被调用。
其实React.useEffect还有个时期也会执行,在第一个参数中,如果有return一个回调的话

import React from 'react'import root from '../../index'function Demo(){//console.log('Demo');const [count,setCount] = React.useState(0)React.useEffect(()=>{console.log('###')let timer = setInterval(()=>{setCount(count => count+1 )},1000)return ()=>{console.log('bbb')// clearInterval(timer)}},[])//加的回调function add(){//setCount(count+1) //第一种写法setCount(count => count+1 )}//卸载组件的回调function unmount(){//react17写法//ReactDOM.unmountComponentAtNode(document.getElementById('root'))//react18写法root.unmount(document.getElementById('root'))}return (<div><h2>当前求和为:{count}</h2><button onClick={add}>点我+1</button><button onClick={unmount}>卸载组件</button></div>)
}export default Demo

在这里插入图片描述
可以看到在组件卸载前React.useEffect又被调用了一次。所以,React.useEffect可以看成是componentDidMount(),componentDidUpdate(),componentWillUnmount() 三个函数的组合。有点妙

4.Ref Hook

(1). Ref Hook可以在函数组件中存储/查找组件内的标签或任意其它数据
(2). 语法: const refContainer = useRef()
(3). 作用:保存标签对象,功能与React.createRef()一样

这个相对简单点

import React from 'react'
function Demo(){const myRef = React.useRef()//提示输入的回调function show(){alert(myRef.current.value)}return (<div><input type="text" ref={myRef}/><button onClick={show}>点我提示数据</button></div>)
}export default Demo

在这里插入图片描述

http://www.lryc.cn/news/26044.html

相关文章:

  • 创新型中小企业认定评定标准
  • 记录一次nginx转发代理skywalking白屏 以及nginx鉴权配置
  • 如何使用FarsightAD在活动目录域中检测攻击者部署的持久化机制
  • Python - 操作txt文件
  • 老杜MySQL入门基础 1
  • Vue中splice的使用
  • Ubuntu通过rsync和inotify实现双机热备
  • 【python】异常详解
  • pc、移动端自适应css
  • Threejs 教程1
  • WuThreat身份安全云-TVD每日漏洞情报-2023-02-23
  • C语言--模拟实现库函数qsort
  • 面向专业课教学和学习的《计算机数学》点播工具
  • 域权限维持之创建DSRM后门
  • 【苹果内购支付】关于uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑
  • 一:BT、BLE版本说明及对比
  • php宝塔搭建部署实战多模板cms管理系统源码
  • 【数据结构初阶】手把手带你实现栈
  • liunx 端口号开放和关闭
  • 【oracle】问题分析常用查询语句
  • 将vue-devtools打包成edge插件
  • SpringBoot常见面试题汇总(超详细回答)
  • 上海亚商投顾:沪指窄幅震荡 ChatGPT概念再度走高
  • 【C语言进阶:指针的进阶】函数指针
  • Sqoop 使用详解
  • 基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 1 code mapping总体介绍与Function标签页介绍
  • 第十四节 包、权限修饰符、final、常量
  • C++类和对象:初始化列表、static成员和友元
  • Windows 11 安装 Docker Desktop
  • 设计模式-第6章(工厂模式)