什么是hook,常用的有哪些hook呢
Admin 2022-09-06 群英技术资讯 1201 次浏览
这篇文章给大家分享的是什么是hook,常用的有哪些hook呢。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。Hook是 React 16.8 的新增特性。它通常与函数式组件同时使用。可以使函数式组件在不编写 class 的情况下,可以拥有class组件的状态、生命周期、引用等功能。
React中常用的hooks有:
useState 状态管理useEffect 生命周期useContext 跨组件数据传递useRef 组件引用自定义hook其实就是自定义函数,与我们写函数组件非常类似。自定义的hook组件的命名与系统的hooks一样,需要以use开头。下面我们用react+ts就来介绍一下常用的几个自定义hook
实现目标:通过 useWindowSize()来实时获取窗口的宽高
新建一个hook文件useWindowSize.ts,代码如下:
import { useEffect, useState } from "react";
//定义size对象
interface WindowSize {
width: number,
height: number
}
const useWindowSize = () => {
const [size, setSize] = useState<WindowSize>({
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
})
useEffect(() => {
//监听size变化
window.addEventListener('resize', () => {
setSize({
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
})
})
return () => {
//组件销毁时移除监听
window.removeEventListener('resize', () => {
setSize({
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
})
})
}
},[])
return size
}
export default useWindowSize
组件中这样使用:
import useWindowSize from './hooks/useWindowSize';
function App() {
const size = useWindowSize()
return (
<div>
<div>页面宽度:{size.width}</div>
<div>页面高度:{size.height}</div>
</div>
)
}
export default App
在浏览器拖动放大缩小时,页面上的数据可动态变化
目标:通过 useWindowScroll()来实时获取页面的滚动偏移量
新建一个hook文件useWindowScroll.ts,代码如下:
import { useEffect, useState } from "react"
//定义偏移量对象
interface ScrollOffset {
x: number,
y: number
}
const useWindowScroll = () => {
const [off, setOff] = useState<ScrollOffset>({
x: window.scrollX,
y: window.scrollY
})
useEffect(() => {
//监听
window.addEventListener('scroll', () => {
setOff({
x: window.scrollX,
y: window.scrollY
})
})
return () => {
//移除监听
window.removeEventListener('scroll', () => {
setOff({
x: window.scrollX,
y: window.scrollY
})
})
}
})
return off
}
export default useWindowScroll
组件中这样使用:
import useWindowScroll from './hooks/useWindowScroll';
function App() {
const offSet = useWindowScroll()
return (
<div style={{height: '10000px', width: '10000px'}}>
<div>滚动y:{offSet.y}</div>
<div>滚动x:{offSet.x}</div>
</div>
)
}
export default App
目标:通过 const [value, setValue] = useLocalStorage('key', 'value') 可以传入默认的初始value和key,且每次修改value可以自动同步到localStorage中
新建一个hook类useLocalStorage,代码如下:
import { useEffect, useState } from "react"
const useLocalStorage = (key: string, defaultValue: string) : ([string, React.Dispatch<React.SetStateAction<string>>]) => {
const [value, setValue] = useState(defaultValue)
useEffect(() => {
window.localStorage.setItem(key, value)
},[key, value])
return [value, setValue]
}
export default useLocalStorage
组件中使用:
import useLocalStorage from './hooks/useLocalStorage';
function App() {
const [value, setValue] = useLocalStorage('key', 'react')
return (
<div>
<button onClick={() => {
//点击修改value,会自动同步至本地
setValue('vue')
}}>点击</button>
<div>{ value }</div>
</div>
)
}
export default App
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
VUE中的proxy和defineproperty有何区别?proxy和defineproperty的区别有:Proxy可以劫持的数组的改变,defineProperty 需要变异、Proxy代理可以劫持对象的改变,defineProperty需要遍历、Proxy代理可以劫持对象属性的添加,defineProperty用this.$set来实现等等,下面我们详细的了解看看。
目前通过H5页面唤起App的场景十分常见,比如常见的分享功能,这篇文章主要给大家介绍了关于H5唤醒APP实现方法及注意点的相关资料,需要的朋友可以参考下
这篇文章主要为大家详细介绍了JavaScript实现Tab点击切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
方法:1、利用var语句声明两个变量并赋值,语法为“var a=数值1;var b=数值2;”;2、利用“*”相乘运算符计算两个变量的乘积,语法为“var res=a*b;”;3、利用alert()方法将计算结果输出即可。
目录proxyTable配置和部署服务器1.在config中的index2.在调取接口的方法中proxyTable代理参数含义proxyTable配置和部署服务器在本地创建node.js服务器,前端访问本地接口需要设置跨域1.在config中的index找到proxyTable,完成以下设置proxyTable: {‘
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008