欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React中常用的Hook有哪些

 更新時間:2023年01月10日 10:16:14   作者:落雪小軒韓  
這篇文章主要介紹了react hooks實(shí)現(xiàn)原理,文中給大家介紹了useState dispatch 函數(shù)如何與其使用的 Function Component 進(jìn)行綁定,節(jié)后實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

一、簡介

Hook是React 16.8.0版本增加的新特性/新語法

可以在函數(shù)組件中使用 state 以及其他的 React 特性

二、使用

1、State Hook

(1)State Hook讓函數(shù)組件也可以有state狀態(tài), 并進(jìn)行狀態(tài)數(shù)據(jù)的讀寫操作

(2)語法: const [xxx, setXxx] = React.useState(initValue)

(3)useState()說明:

參數(shù): 第一次初始化指定的值在內(nèi)部作緩存
返回值: 包含2個元素的數(shù)組, 第1個為內(nèi)部當(dāng)前狀態(tài)值, 第2個為更新狀態(tài)值的函數(shù)

(4)setXxx()2種寫法:

setXxx(newValue): 參數(shù)為非函數(shù)值, 直接指定新的狀態(tài)值, 內(nèi)部用其覆蓋原來的狀態(tài)值
setXxx(value => newValue): 參數(shù)為函數(shù), 接收原本的狀態(tài)值, 返回新的狀態(tài)值, 內(nèi)部用其覆蓋原來的狀態(tài)值

用類式組件如下:

export default class Demo extends Component {
	state = {count:0}
	add = () => {
		this.setState(state => ({count: state.count + 1}))
	}
	render() {
		return (
			<div>
				<h2>當(dāng)前求和為:{this.state.count}</h2>
				<button onClick={this.add}>點(diǎn)我加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>當(dāng)前求和為:{this.state.count}</h2>
			<button onClick={add}>點(diǎn)我加1</button>
		</div>
	)
}

Demo函數(shù)調(diào)用1+n次,每次調(diào)用const [count,setCount] = React.useState(0)都會執(zhí)行,理論上count的值一直都是0,但實(shí)際上每次點(diǎn)擊按鈕count的值都會加1。那是因?yàn)?code>React底層做了處理,第一次調(diào)用的時候就把count的值存下來了,后續(xù)再調(diào)用函數(shù)的時候不會因?yàn)閭魅氲氖?code>0把原來的值給覆蓋掉。

2、Effect Hook

(1)Effect Hook 可以讓你在函數(shù)組件中執(zhí)行副作用操作(用于模擬類組件中的生命周期鉤子)

(2)React中的副作用操作:

發(fā)ajax請求數(shù)據(jù)獲取
設(shè)置訂閱 / 啟動定時器
手動更改真實(shí)DOM

(3)語法和說明:

useEffect(() => { 
    // 在此可以執(zhí)行任何帶副作用操作
    return () => { // 在組件卸載前執(zhí)行
      // 在此做一些收尾工作, 比如清除定時器/取消訂閱等
    }
}, [stateValue]) // 如果指定的是[], 回調(diào)函數(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>當(dāng)前求和為:{this.state.count}</h2>
				<button onClick={this.add}>點(diǎn)我加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>當(dāng)前求和為:{this.state.count}</h2>
			<button onClick={add}>點(diǎn)我加1</button>
			<button onClick={unmount}>卸載組件</button>
		</div>
	)
}

(1)React.useEffect(() => {}),如果第二個參數(shù)沒有寫,會監(jiān)測所有的狀態(tài),初始化以及每個狀態(tài)變化的時候都會調(diào)用,相當(dāng)于componentDidMountcomponentDidUpdate

(2)React.useEffect(() => {},[]),如果第二個參數(shù)是空數(shù)組,所有的狀態(tài)都不會監(jiān)測,執(zhí)行1次(初始化),相當(dāng)于componentDidMount

(3)React.useEffect(() => {},[count]),監(jiān)測count值,執(zhí)行1+n次(初始化以及count值變化的時候)

(4)React.useEffect(() => {})中返回一個函數(shù),相當(dāng)于componentWillUnmount

3、Ref Hook

(1)Ref Hook可以在函數(shù)組件中存儲/查找組件內(nèi)的標(biāo)簽或任意其它數(shù)據(jù)

(2)語法: const refContainer = useRef()

(3)作用:保存標(biāo)簽對象,功能與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 }>點(diǎn)擊提示數(shù)據(jù)</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 }>點(diǎn)擊提示數(shù)據(jù)</button>
			</div>
		)
	}
}

到此這篇關(guān)于React中常用的Hook有哪些的文章就介紹到這了,更多相關(guān)React Hook內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React.js入門學(xué)習(xí)第一篇

    React.js入門學(xué)習(xí)第一篇

    這篇文章主要為大家介紹了React.js入門學(xué)習(xí)第一篇,詳細(xì)解析React.js基礎(chǔ)知識,全方位的了解React.js,感興趣的小伙伴們可以參考一下
    2016-03-03
  • React中useState和useEffect的用法詳解

    React中useState和useEffect的用法詳解

    Hooks?發(fā)布之后,函數(shù)組件能擁有自己的?state,React提供了很多內(nèi)置的Hooks,這篇文章就來和大家介紹一下useState?和?useEffect的使用,需要的可以參考一下
    2023-06-06
  • React如何優(yōu)雅的捕獲異常

    React如何優(yōu)雅的捕獲異常

    捕獲異常是來定位你錯誤代碼的。本文主要介紹了 React如何捕獲異常,你知道多少種方法,ErrorBoundary,ErrorBoundary-try-catch等等。本文就來詳細(xì)的介紹一下
    2021-06-06
  • React使用Mobx6.x共享狀態(tài)問題

    React使用Mobx6.x共享狀態(tài)問題

    這篇文章主要介紹了React使用Mobx6.x共享狀態(tài)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React中key屬性的警告及解決方案

    React中key屬性的警告及解決方案

    在使用 React 進(jìn)行開發(fā)時,key 屬性是一個至關(guān)重要的概念,尤其在渲染列表時,開發(fā)者在使用 key 屬性時,常常會遇到各種警告信息,本文將詳細(xì)解析這些警告的原因,提供有效的解決方案,并總結(jié)最佳實(shí)踐,需要的朋友可以參考下
    2024-12-12
  • TS裝飾器bindThis優(yōu)雅實(shí)現(xiàn)React類組件中this綁定

    TS裝飾器bindThis優(yōu)雅實(shí)現(xiàn)React類組件中this綁定

    這篇文章主要為大家介紹了TS裝飾器bindThis優(yōu)雅實(shí)現(xiàn)React類組件中this綁定,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 解決React報錯React?Hook?useEffect?has?a?missing?dependency

    解決React報錯React?Hook?useEffect?has?a?missing?dependency

    這篇文章主要為大家介紹了解決React報錯React?Hook?useEffect?has?a?missing?dependency,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React中組件的this.state和setState的區(qū)別

    React中組件的this.state和setState的區(qū)別

    在React開發(fā)中,this.state用于初始化和讀取組件狀態(tài),而setState()用于安全地更新狀態(tài),正確使用這兩者對于管理React組件狀態(tài)至關(guān)重要,避免性能問題和常見錯誤
    2024-09-09
  • 詳解React 16 中的異常處理

    詳解React 16 中的異常處理

    這篇文章主要介紹了詳解React 16 中的異常處理的相關(guān)資料,React 16.x 版本中,引入了所謂 Error Boundary 的概念,從而保證了發(fā)生在 UI 層的錯誤不會連鎖導(dǎo)致整個應(yīng)用程序崩潰;未被任何異常邊界捕獲的異??赡軙?dǎo)致整個 React 組件樹被卸載,需要的朋友可以參考下
    2017-07-07
  • react?實(shí)現(xiàn)表格列表拖拽排序的示例

    react?實(shí)現(xiàn)表格列表拖拽排序的示例

    本文主要介紹了react?實(shí)現(xiàn)表格列表拖拽排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論