国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React學(xué)習(xí)8 hooks

這篇具有很好參考價(jià)值的文章主要介紹了React學(xué)習(xí)8 hooks。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、setState

setState更新數(shù)據(jù)是異步的,如果想獲取更新完的數(shù)據(jù),需要通過(guò)第二個(gè)參數(shù)回調(diào)函數(shù)來(lái)獲取

   //對(duì)象式setState
    add = ()=>{
        const {count} = this.state
        this.setState({count: count + 1}, ()=>{
            console.log(this.state.count)
        })
    }
    //函數(shù)式setState()
    add = ()=>{
        const {count} = this.state
        this.setState((state,props)=>{
            console.log(state,props)
            return {count:state.count+1}
        })
    }

2、lazyLoad,用的時(shí)候再調(diào)用,不會(huì)預(yù)先調(diào)用,需要用suspence包裹注冊(cè)路由

import React, { Component,lazy,Suspense} from 'react'
import {NavLink,Route} from 'react-router-dom'

// import Home from './Home'
// import About from './About'

import Loading from './Loading'
const Home = lazy(()=> import('./Home') )
const About = lazy(()=> import('./About'))


<Suspense fallback={<Loading/>}>
{/* 注冊(cè)路由 */}
    <Route path="/about" component={About}/>
    <Route path="/home" component={Home}/>
</Suspense>

3、stateHook

userState

函數(shù)組件中使用state,通過(guò)調(diào)用React.useState()使用,該數(shù)組兩個(gè)變量,第一個(gè)存儲(chǔ)狀態(tài)值,第二個(gè)存儲(chǔ)改變狀態(tài)的方法,通過(guò)解構(gòu)賦值取出來(lái)即可

	//設(shè)置state初始值,并獲取調(diào)用函數(shù)
    const [count,setCount] = React.useState(0)

	function add(){
		//setCount(count+1) //第一種寫(xiě)法
		setCount(count => count+1 )
	}

userEffect,監(jiān)聽(tīng)函數(shù)

React.userEffect(,[])第二個(gè)參數(shù)是檢測(cè)對(duì)象,如果監(jiān)測(cè)空數(shù)組,則相當(dāng)于類式組件中的componentDidMount,只在加載的時(shí)候調(diào)用,其可以檢測(cè)數(shù)值的變化,所以也可以當(dāng)componentDidUpdate使用

userEffect的第一個(gè)參數(shù)可以寫(xiě)一個(gè)返回函數(shù),其返回函數(shù)相當(dāng)于componentWillUnmount

	React.useEffect(()=>{
		let timer = setInterval(()=>{
			setCount(count => count+1 )
		},1000)
		return ()=>{
			clearInterval(timer)
		}
	},[])

可以把 useEffect Hook 看做如下三個(gè)函數(shù)的組合
? ? ? ? componentDidMount()
? ? ? ? componentDidUpdate()
? ? ?? ?componentWillUnmount()?

RefHook

(1). Ref Hook可以在函數(shù)組件中存儲(chǔ)/查找組件內(nèi)的標(biāo)簽或任意其它數(shù)據(jù)
(2). 語(yǔ)法: const refContainer = useRef()
(3). 作用:保存標(biāo)簽對(duì)象,功能與React.createRef()一樣

	const myRef = React.useRef()
	//提示輸入的回調(diào)
	function show(){
		alert(myRef.current.value)
	}


    <input type="text" ref={myRef}/>
	<button onClick={show}>點(diǎn)我提示數(shù)據(jù)</button>

Fragment

<Fragment>可以取代無(wú)效的<div>標(biāo)簽,編譯的時(shí)候會(huì)自動(dòng)丟失忽略,不再渲染真實(shí)DOM

Context,組件間通信方式,常用于祖組件 和 后代組件間的通信

//1、創(chuàng)建Context對(duì)象
const MyContext = React.createContext()
const {Provider,Consumer} = MyContext


//傳遞
<Provider value={{username,age}}>
	<B/>
</Provider>


//類式組件聲明接收context
static contextType = MyContext
const {username,age} = this.context


//函數(shù)式組件與類式組件都可以接受的方式
<Consumer>
    {value => `${value.username},年齡是${value.age}`}
</Consumer>

PureComponent

Component的2個(gè)問(wèn)題?

> 1. 只要執(zhí)行setState(),即使不改變狀態(tài)數(shù)據(jù), 組件也會(huì)重新render() ==> 效率低
>
> 2. 只當(dāng)前組件重新render(), 就會(huì)自動(dòng)重新render子組件,縱使子組件沒(méi)有用到父組件的任何數(shù)據(jù) ==> 效率低

### 效率高的做法

> ?只有當(dāng)組件的state或props數(shù)據(jù)發(fā)生改變時(shí)才重新render()

### 原因

> ?Component中的shouldComponentUpdate()總是返回true

改進(jìn)措施:

使用PureComponent取代Component,但是push等操作的時(shí)候會(huì)出現(xiàn)問(wèn)題,不建議使用

?? ??? ?注意:?
?? ??? ??? ?只是進(jìn)行state和props數(shù)據(jù)的淺比較, 如果只是數(shù)據(jù)對(duì)象內(nèi)部數(shù)據(jù)變了, 返回false ?
?? ??? ??? ?不要直接修改state數(shù)據(jù), 而是要產(chǎn)生新數(shù)據(jù)

renderProps插槽技術(shù)

export default class Parent extends Component {
	render() {
		return (
			<div className="parent">
				<h3>我是Parent組件</h3>
				<A render={(name)=><B name={name}/>}/>
			</div>
		)
	}
}

class A extends Component {
	state = {name:'tom'}
	render() {
		console.log(this.props);
		const {name} = this.state
		return (
			<div className="a">
				<h3>我是A組件</h3>
				{this.props.render(name)}
			</div>
		)
	}
}

ErrorBoundary

只適用于生產(chǎn)環(huán)境,測(cè)試環(huán)境還是會(huì)報(bào)錯(cuò) getDerivedStateFromError

#### 理解:

錯(cuò)誤邊界(Error boundary):用來(lái)捕獲后代組件錯(cuò)誤,渲染出備用頁(yè)面

#### 特點(diǎn):

只能捕獲后代組件生命周期產(chǎn)生的錯(cuò)誤,不能捕獲自己組件產(chǎn)生的錯(cuò)誤和其他組件在合成事件、定時(shí)器中產(chǎn)生的錯(cuò)誤

##### 使用方式:

getDerivedStateFromError(捕獲后代組件生命周期產(chǎn)生的錯(cuò)誤)配合componentDidCatch(捕獲頁(yè)面報(bào)錯(cuò))

import React, { Component } from 'react'
import Child from './Child'

export default class Parent extends Component {

	state = {
		hasError:'' //用于標(biāo)識(shí)子組件是否產(chǎn)生錯(cuò)誤
	}

	//當(dāng)Parent的子組件出現(xiàn)報(bào)錯(cuò)時(shí)候,會(huì)觸發(fā)getDerivedStateFromError調(diào)用,并攜帶錯(cuò)誤信息
	static getDerivedStateFromError(error){
		console.log('@@@',error);
		return {hasError:error}
	}

	componentDidCatch(){
		console.log('此處統(tǒng)計(jì)錯(cuò)誤,反饋給服務(wù)器,用于通知編碼人員進(jìn)行bug的解決');
	}

	render() {
		return (
			<div>
				<h2>我是Parent組件</h2>
				{this.state.hasError ? <h2>當(dāng)前網(wǎng)絡(luò)不穩(wěn)定,稍后再試</h2> : <Child/>}
			</div>
		)
	}
}

componentDidCatch()?方法只適用于 class 組件,函數(shù)組件可以使用 ErrorBoundary 來(lái)實(shí)現(xiàn)相似的功能。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-475948.html

到了這里,關(guān)于React學(xué)習(xí)8 hooks的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • React - 請(qǐng)你說(shuō)一說(shuō)setState是同步的還是異步的

    React - 請(qǐng)你說(shuō)一說(shuō)setState是同步的還是異步的

    難度級(jí)別:中高級(jí)及以上 ??????????????????????????????提問(wèn)概率:70%? 在React項(xiàng)目中,使用setState可以更新?tīng)顟B(tài)數(shù)據(jù),而不能直接使用為this.state賦值的方式。而為了避免重復(fù)更新state數(shù)據(jù),React首先將state添加到狀態(tài)隊(duì)列中,此時(shí)我們可以通過(guò)shouldComponentUpdate這

    2024年04月09日
    瀏覽(21)
  • React hooks文檔筆記(五)useEffect——解決異步操作競(jìng)爭(zhēng)問(wèn)題

    React hooks文檔筆記(五)useEffect——解決異步操作競(jìng)爭(zhēng)問(wèn)題

    非bug,重新安裝組件僅在開(kāi)發(fā)過(guò)程中發(fā)生,幫助找到需要清理的效果。在生產(chǎn)環(huán)境中只會(huì)加載一次。 React 將在 Effect 下次運(yùn)行之前以及卸載期間調(diào)用您的清理函數(shù)。 return () = {}; 在開(kāi)發(fā)中, Effect call addEventListener() ,然后立即call removeEventListener() ,然后再次cal laddEventListener()

    2024年02月11日
    瀏覽(34)
  • react hook問(wèn)題記錄(持續(xù)更新)

    實(shí)際使用react hook的時(shí)候遇到的一些問(wèn)題記錄下來(lái)了,溫故而知新。 例子1:界面上有個(gè)按鈕,點(diǎn)擊按鈕界面上數(shù)值會(huì)增加1和2 但是實(shí)際的結(jié)果是: 點(diǎn)擊按鈕,界面展示的是 0,2。跟預(yù)期需要展示的0,1,2不一樣 例子2:點(diǎn)擊按鈕,執(zhí)行三次setState,希望加3 但是實(shí)際的結(jié)果是:

    2024年01月15日
    瀏覽(19)
  • 【實(shí)戰(zhàn)】 JWT、用戶認(rèn)證與異步請(qǐng)求(1) —— React17+React Hook+TS4 最佳實(shí)踐,仿 Jira 企業(yè)級(jí)項(xiàng)目(四)

    【實(shí)戰(zhàn)】 JWT、用戶認(rèn)證與異步請(qǐng)求(1) —— React17+React Hook+TS4 最佳實(shí)踐,仿 Jira 企業(yè)級(jí)項(xiàng)目(四)

    學(xué)習(xí)內(nèi)容來(lái)源:React + React Hook + TS 最佳實(shí)踐-慕課網(wǎng) 相對(duì)原教程,我在學(xué)習(xí)開(kāi)始時(shí)(2023.03)采用的是當(dāng)前最新版本: 項(xiàng) 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月10日
    瀏覽(24)
  • 【實(shí)戰(zhàn)】 四、JWT、用戶認(rèn)證與異步請(qǐng)求(上) —— React17+React Hook+TS4 最佳實(shí)踐,仿 Jira 企業(yè)級(jí)項(xiàng)目(四)

    【實(shí)戰(zhàn)】 四、JWT、用戶認(rèn)證與異步請(qǐng)求(上) —— React17+React Hook+TS4 最佳實(shí)踐,仿 Jira 企業(yè)級(jí)項(xiàng)目(四)

    學(xué)習(xí)內(nèi)容來(lái)源:React + React Hook + TS 最佳實(shí)踐-慕課網(wǎng) 相對(duì)原教程,我在學(xué)習(xí)開(kāi)始時(shí)(2023.03)采用的是當(dāng)前最新版本: 項(xiàng) 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月11日
    瀏覽(25)
  • React學(xué)習(xí)8 hooks

    1、setState setState更新數(shù)據(jù)是異步的,如果想獲取更新完的數(shù)據(jù),需要通過(guò)第二個(gè)參數(shù)回調(diào)函數(shù)來(lái)獲取 2、lazyLoad,用的時(shí)候再調(diào)用,不會(huì)預(yù)先調(diào)用,需要用suspence包裹注冊(cè)路由 3、stateHook userState 函數(shù)組件中使用state,通過(guò)調(diào)用React.useState()使用,該數(shù)組兩個(gè)變量,第一個(gè)存儲(chǔ)狀態(tài)

    2024年02月08日
    瀏覽(16)
  • React18 hook學(xué)習(xí)筆記

    useState useState用于在函數(shù)組件中聲明和管理狀態(tài) 它接受初始狀態(tài),并返回一個(gè)狀態(tài)變量和一個(gè)更新?tīng)顟B(tài)的函數(shù) 通過(guò)調(diào)用更新?tīng)顟B(tài)的函數(shù),可以改變狀態(tài)的值并觸發(fā)組件的重新渲染 useEffect React的useEffect鉤子可以讓開(kāi)發(fā)者在函數(shù)組件中管理副作用。 副作用操作是指那些與組件渲

    2024年02月14日
    瀏覽(23)
  • React16源碼: React中的setState和forceUpdate源碼實(shí)現(xiàn)

    setState 和 forceUpdate 1 ) 概述 通過(guò) class component 內(nèi)部的 setState ,以及 forceUpdate 去更新一個(gè)組件的過(guò)程 在react的應(yīng)用當(dāng)中,我們只有 ReactDOM.render setState ,以及 forceUpdate 這幾種種方式去更新react的應(yīng)用是合理的,其他沒(méi)有什么特別常用的方式去更新了 而且react官方推薦的也是用

    2024年01月25日
    瀏覽(22)
  • 【React】組件生命周期、組件通信、setState

    【React】組件生命周期、組件通信、setState

    ? 組件化思想的應(yīng)用: ? ? 有了組件化的思想,我們?cè)谥蟮拈_(kāi)發(fā)中就要充分的利用它。 ? ? 盡可能的將頁(yè)面拆分成一個(gè)個(gè)小的、可復(fù)用的組件。 ? ? 這樣讓我們的代碼更加方便組織和管理,并且擴(kuò)展性也更強(qiáng)。 ? React的組件相對(duì)于Vue更加的靈活和多樣,按照不同的

    2024年01月20日
    瀏覽(22)
  • React中的setState使用細(xì)節(jié)和原理解析

    React中的setState使用細(xì)節(jié)和原理解析

    前面我們有使用過(guò)setState的基本使用, 接下來(lái)我們對(duì)setState使用進(jìn)行詳細(xì)的介紹 使用setState的原因 開(kāi)發(fā)中我們并不能直接通過(guò)修改state的值來(lái)讓界面發(fā)生更新 : 因?yàn)槲覀冃薷牧藄tate之后,希望React根據(jù)最新的State來(lái)重新渲染界面,但是 this.state 這種方式的修改React并不知道數(shù)據(jù)發(fā)

    2024年02月03日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包