React中常用的Hook有哪些
一、簡介
Hook是React 16.8.0版本增加的新特性/新語法
可以在函數(shù)組件中使用 state 以及其他的 React 特性
二、使用
1、State Hook
(1)State Hook讓函數(shù)組件也可以有state狀態(tài), 并進行狀態(tài)數(shù)據的讀寫操作
(2)語法: const [xxx, setXxx] = React.useState(initValue)
(3)useState()說明:
參數(shù): 第一次初始化指定的值在內部作緩存
返回值: 包含2個元素的數(shù)組, 第1個為內部當前狀態(tài)值, 第2個為更新狀態(tài)值的函數(shù)
(4)setXxx()2種寫法:
setXxx(newValue): 參數(shù)為非函數(shù)值, 直接指定新的狀態(tài)值, 內部用其覆蓋原來的狀態(tài)值
setXxx(value => newValue): 參數(shù)為函數(shù), 接收原本的狀態(tài)值, 返回新的狀態(tài)值, 內部用其覆蓋原來的狀態(tài)值
用類式組件如下:
export default class Demo extends Component {
state = {count:0}
add = () => {
this.setState(state => ({count: state.count + 1}))
}
render() {
return (
<div>
<h2>當前求和為:{this.state.count}</h2>
<button onClick={this.add}>點我加1</button>
</div>
)
}
}
用函數(shù)式組件如下:
export default function Demo() {
const [count,setCount] = React.useState(0)
// 其他狀態(tài)也要用同樣的方法
const [name,setName] = React.useState('Jack')
function add() {
// 寫法一
// setCount(count + 1)
// 寫法二
setCount(count => count + 1)
}
return (
<div>
<h2>當前求和為:{this.state.count}</h2>
<button onClick={add}>點我加1</button>
</div>
)
}
Demo函數(shù)調用1+n次,每次調用const [count,setCount] = React.useState(0)都會執(zhí)行,理論上count的值一直都是0,但實際上每次點擊按鈕count的值都會加1。那是因為React底層做了處理,第一次調用的時候就把count的值存下來了,后續(xù)再調用函數(shù)的時候不會因為傳入的是0把原來的值給覆蓋掉。
2、Effect Hook
(1)Effect Hook 可以讓你在函數(shù)組件中執(zhí)行副作用操作(用于模擬類組件中的生命周期鉤子)
(2)React中的副作用操作:
發(fā)ajax請求數(shù)據獲取
設置訂閱 / 啟動定時器
手動更改真實DOM
(3)語法和說明:
useEffect(() => {
// 在此可以執(zhí)行任何帶副作用操作
return () => { // 在組件卸載前執(zhí)行
// 在此做一些收尾工作, 比如清除定時器/取消訂閱等
}
}, [stateValue]) // 如果指定的是[], 回調函數(shù)只會在第一次render()后執(zhí)行
(4)可以把 useEffect Hook 看做如下三個函數(shù)的組合
componentDidMount()
componentDidUpdate()
componentWillUnmount()
用類式組件如下:
export default class Demo extends Component {
state = {count:0}
add = () => {
this.setState(state => ({count: state.count + 1}))
}
unmount = () => {
ReactDOM.unmountComponentAtNode(document.getElementById('root'))
}
componentDidMount() {
this.timer = setInterval(() => {
this.setState(state => ({count:state.count + 1}))
},1000)
}
componentWillUnmount(){
clearInterval(this.timer)
}
render() {
return (
<div>
<h2>當前求和為:{this.state.count}</h2>
<button onClick={this.add}>點我加1</button>
<button onClick={this.unmount}>卸載組件</button>
</div>
)
}
}
用函數(shù)式組件如下:
export default function Demo() {
const [count,setCount] = React.useState(0)
React.useEffect(() => {
let timer = setInterval(() => {
setCount(count=> count + 1)
},1000)
return () => {
clearInterval(timer)
}
},[])
function add() {
setCount(count => count + 1)
}
function unmount() {
ReactDOM.unmountComponentAtNode(document.getElementById('root'))
}
return (
<div>
<h2>當前求和為:{this.state.count}</h2>
<button onClick={add}>點我加1</button>
<button onClick={unmount}>卸載組件</button>
</div>
)
}
(1)React.useEffect(() => {}),如果第二個參數(shù)沒有寫,會監(jiān)測所有的狀態(tài),初始化以及每個狀態(tài)變化的時候都會調用,相當于componentDidMount和componentDidUpdate
(2)React.useEffect(() => {},[]),如果第二個參數(shù)是空數(shù)組,所有的狀態(tài)都不會監(jiān)測,執(zhí)行1次(初始化),相當于componentDidMount
(3)React.useEffect(() => {},[count]),監(jiān)測count值,執(zhí)行1+n次(初始化以及count值變化的時候)
(4)React.useEffect(() => {})中返回一個函數(shù),相當于componentWillUnmount
3、Ref Hook
(1)Ref Hook可以在函數(shù)組件中存儲/查找組件內的標簽或任意其它數(shù)據
(2)語法: const refContainer = useRef()
(3)作用:保存標簽對象,功能與React.createRef()一樣
用類式組件如下:
export default class Demo extends Component {
myRef = React.createRef()
show = ()=>{
alert(this.myRef.current.value)
}
render() {
return (
<div>
<input type="text" ref={this.myRef}/>
<button onClick={this.show }>點擊提示數(shù)據</button>
</div>
)
}
}
用函數(shù)式組件如下:
export default class Demo extends Component {
const myRef = React.useRef()
function show() {
alert(myRef.current.value)
}
render() {
return (
<div>
<input type="text" ref={myRef}/>
<button onClick={show }>點擊提示數(shù)據</button>
</div>
)
}
}
到此這篇關于React中常用的Hook有哪些的文章就介紹到這了,更多相關React Hook內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
TS裝飾器bindThis優(yōu)雅實現(xiàn)React類組件中this綁定
這篇文章主要為大家介紹了TS裝飾器bindThis優(yōu)雅實現(xiàn)React類組件中this綁定,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
解決React報錯React?Hook?useEffect?has?a?missing?dependency
這篇文章主要為大家介紹了解決React報錯React?Hook?useEffect?has?a?missing?dependency,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
React中組件的this.state和setState的區(qū)別
在React開發(fā)中,this.state用于初始化和讀取組件狀態(tài),而setState()用于安全地更新狀態(tài),正確使用這兩者對于管理React組件狀態(tài)至關重要,避免性能問題和常見錯誤2024-09-09

