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

【前端知識】React 基礎(chǔ)鞏固(四十二)——React Hooks的介紹

這篇具有很好參考價(jià)值的文章主要介紹了【前端知識】React 基礎(chǔ)鞏固(四十二)——React Hooks的介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

React 基礎(chǔ)鞏固(四十二)——React Hooks的介紹

一、為什么需要Hook?

Hook 是 React 16.8 的新增特性,它可以讓我們在不編寫class的情況下使用state以及其他的React特性(比如生命周期)。

class組件 VS 函數(shù)式組件:

class的優(yōu)勢:

  1. class組件可以定義自己的state,用來保存組件自己內(nèi)部的狀態(tài);而函數(shù)式組件不可以,因?yàn)楹瘮?shù)每次調(diào)用都會產(chǎn)生新的臨時(shí)變量。
  2. class組件有自己的生命周期,我們可以在對應(yīng)的生命周期中完成自己的邏輯。比如在componentDidMount中發(fā)送網(wǎng)絡(luò)請求,并且該生命周期函數(shù)只會執(zhí)行一次。如果在函數(shù)中發(fā)送網(wǎng)絡(luò)請求,意味著每次重新渲染都會重新發(fā)送一次網(wǎng)絡(luò)請求。
  3. class組件可以在狀態(tài)改變時(shí)只會重新執(zhí)行render函數(shù)以及我們希望重新調(diào)用的生命周期函數(shù)componentDidUpdate等;而函數(shù)式組件在重新渲染時(shí),整個函數(shù)都會被執(zhí)行,似乎沒有什么地方可以只讓它們調(diào)用一次。

class的劣勢:

  1. 組件變得日益復(fù)雜

    • 隨著業(yè)務(wù)的增多,class組件會變得越來越復(fù)雜;
    • 比如componentDidMount中,可能就會包含大量的邏輯代碼:包括網(wǎng)絡(luò)請求、一些事件的監(jiān)聽(還需要在componentWillUnmount中移除);
    • 而對于這樣的class實(shí)際上非常難以拆分:因?yàn)樗鼈兊倪壿嬐煸谝黄?,?qiáng)行拆分反而會造成過度設(shè)計(jì),增加代碼的復(fù)雜度;
  2. 難以理解的class

    • 在class中,我們必須搞清楚this的指向到底是誰,所以需要花很多的精力去學(xué)習(xí)this,非常麻煩;
  3. 組件復(fù)用狀態(tài)困難

    • 復(fù)用狀態(tài)需要通過高階組件;
    • 或者類似于Provider、Consumer來共享一些狀態(tài),但是多次使用Consumer時(shí),我們的代碼就會存在很多嵌套;

Hook的優(yōu)勢:

  1. 解決問題:在不編寫class的情況下使用state以及其他的React特性,由此延伸出非常多的用法來解決上述的問題。
  2. 完美兼容:基本可以代替我們之前所有使用class組件的地方,它完全向下兼容,可以漸進(jìn)式的來使用它。

二、類組件和結(jié)合Hook的函數(shù)組件的對比

  1. 用類組件實(shí)現(xiàn)一個計(jì)數(shù)器

    import React, { PureComponent } from "react";
    
    export class CounterClass extends PureComponent {
      constructor(props) {
        super(props);
    
        this.state = {
          counter: 0,
        };
      }
    
      increment() {
        this.setState({
          counter: this.state.counter + 1,
        });
      }
    
      decrement() {
        this.setState({
          counter: this.state.counter - 1,
        });
      }
    
      render() {
        const { counter } = this.state;
        return (
          <div>
            <h2>當(dāng)前計(jì)數(shù):{counter}</h2>
            <button onClick={(e) => this.increment()}>+1</button>
            <button onClick={(e) => this.decrement()}>-1</button>
          </div>
        );
      }
    }
    
    export default CounterClass;
    
    
  2. 用Hook+函數(shù)組件的方式實(shí)現(xiàn)一個計(jì)數(shù)器

    import { memo, useState } from "react";
    
    function CounterHook(props) {
      const [counter, setCounter] = useState(0);
    
      return (
        <div>
          <h2>當(dāng)前計(jì)數(shù):{counter}</h2>
          <button onClick={(e) => setCounter(counter + 1)}>+1</button>
          <button onClick={(e) => setCounter(counter - 1)}>-1</button>
        </div>
      );
    }
    
    export default memo(CounterHook);
    
    
  3. 對比結(jié)果

    兩者雖然都能實(shí)現(xiàn)相同的計(jì)數(shù)器效果,但是從上文的代碼量來看,利用Hook+函數(shù)組件的方式,代碼更簡潔,使用更方便,并且不用考慮this的相關(guān)問題!這就是Hook帶來的歷史性變革!

    【前端知識】React 基礎(chǔ)鞏固(四十二)——React Hooks的介紹,前端知識,React,前端,react.js,前端框架文章來源地址http://www.zghlxwxcb.cn/news/detail-619462.html

到了這里,關(guān)于【前端知識】React 基礎(chǔ)鞏固(四十二)——React Hooks的介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【前端知識】React 基礎(chǔ)鞏固(四十一)——手動路由跳轉(zhuǎn)、參數(shù)傳遞及路由配置

    【前端知識】React 基礎(chǔ)鞏固(四十一)——手動路由跳轉(zhuǎn)、參數(shù)傳遞及路由配置

    利用 useNavigate 封裝一個 withRouter(hoc/with_router.js) 添加到hoc/index.js文件中 利用withRouter,攔截Home組件,實(shí)現(xiàn)手動跳轉(zhuǎn)路由 路由參數(shù)傳遞包括:1.動態(tài)路由傳參;2.查詢字符串傳參 改造withRouter,通過 useParams() 和 useSearchParams() 來接收兩種參數(shù)傳遞: 在界面中,通過params來接收

    2024年02月14日
    瀏覽(25)
  • 【前端知識】React 基礎(chǔ)鞏固(三十二)——Redux的三大原則、使用流程及實(shí)踐

    【前端知識】React 基礎(chǔ)鞏固(三十二)——Redux的三大原則、使用流程及實(shí)踐

    單一數(shù)據(jù)源 整個應(yīng)用程序的state被存儲在一顆object tree 中,并且這個object tree 只存儲在一個store中; Redux并沒有強(qiáng)制讓我們不能創(chuàng)建多個Store,但是那樣做不利于數(shù)據(jù)維護(hù); 單一的數(shù)據(jù)源可以讓整個應(yīng)用程序的state變得方便維護(hù)、追蹤、修改; State是只讀的 唯一修改State的方法

    2024年02月15日
    瀏覽(31)
  • 【前端知識】React 基礎(chǔ)鞏固(十三)——列表渲染

    在 React 中沒有像 Vue 模塊語法中的 v-for 指令,而是需要我們通過 JS 代碼的方式組織數(shù)據(jù),轉(zhuǎn)成 JSX 在 React 中,展示列表最多的方式就是使用數(shù)組的 map 高階函數(shù) 在展示數(shù)組前,有時(shí)會進(jìn)行一些處理 過濾一些內(nèi)容(filter 函數(shù)) 截取數(shù)組中的一部分內(nèi)容(slice 函數(shù)) 列表中的

    2024年02月10日
    瀏覽(31)
  • 【前端知識】React 基礎(chǔ)鞏固(二十八)——StrictMode

    【前端知識】React 基礎(chǔ)鞏固(二十八)——StrictMode

    StrictMode 是一個用來突出顯示應(yīng)用程序中潛在問題的工具 與 Fragment 一樣,StrictMode 不會渲染任何可見的 UI 為后代出發(fā)額外的檢測和警告 嚴(yán)格模式檢查僅在開發(fā)模式下運(yùn)行,不影響生產(chǎn)構(gòu)建 嚴(yán)格模式檢查什么? 識別不安全的生命周期 使用過時(shí)的 ref API 檢查意外的副作用 組件

    2024年02月16日
    瀏覽(57)
  • 【前端知識】React 基礎(chǔ)鞏固(二十七)——Fragment

    【前端知識】React 基礎(chǔ)鞏固(二十七)——Fragment

    Fragment 允許將子列表分組,而無需向 DOM 添加額外節(jié)點(diǎn) 可以采用語法糖 / 來替代 Fragment,但在需要添加 key 的場景下不能使用此短語 查看Fragment應(yīng)用后的效果

    2024年02月16日
    瀏覽(28)
  • 【前端知識】React基礎(chǔ)鞏固(二)——JSX注意點(diǎn)

    createElement存在的問題: 繁瑣不簡潔 不直觀,無法一眼看出所描述的結(jié)構(gòu) 不優(yōu)雅,開發(fā)體驗(yàn)不好 JSX 簡介:JSX 是 JavaScript XML 的簡寫,表示了在JS代碼中寫XML(HTML)格式的代碼 優(yōu)勢:聲明式語法更加直觀,與HTML結(jié)構(gòu)相同,降低學(xué)習(xí)成本,提高開發(fā)效率 JSX 是 react 的核心內(nèi)容‘

    2024年02月09日
    瀏覽(28)
  • 【前端知識】React 基礎(chǔ)鞏固(二十三)——React 性能優(yōu)化 SCU相關(guān)

    React 的渲染流程 JSX - 虛擬 DOM - 真實(shí) DOM React 的更新流程 props/state 改變 - render函數(shù)重新執(zhí)行 - 產(chǎn)生新的DOM樹 - 新舊DOM樹進(jìn)行diff - 計(jì)算出差異進(jìn)行更新 - 更新到真實(shí)的DOM React 在 props 或 state 發(fā)生改變時(shí),會調(diào)用 React 的 render 方法,會創(chuàng)建一顆不同的樹 React 需要基于這兩顆不同的

    2024年02月15日
    瀏覽(39)
  • 【前端知識】React 基礎(chǔ)鞏固(十九)——組件化開發(fā)(三)

    Main.jsx TabControl/index.jsx TabControl/style.css

    2024年02月13日
    瀏覽(28)
  • 【前端知識】React 基礎(chǔ)鞏固(七)——JSX 的基本語法

    JSX 是一種 JS 的語法擴(kuò)展(extension),也可以稱之為 JavaScript XML,因?yàn)榭雌饋砭褪且欢?XML 語法 它用于描述我們的 UI 界面,并且其可以和 JS 融合在一起使用 它不同于 Vue 中的模塊語法,不需要專門學(xué)習(xí)模塊語法中的指令 React 認(rèn)為 渲染邏輯 本質(zhì)上與 其他UI邏輯 存在內(nèi)在耦合

    2024年02月10日
    瀏覽(68)
  • 【前端知識】React 基礎(chǔ)鞏固(二十六)——Portals 的使用

    【前端知識】React 基礎(chǔ)鞏固(二十六)——Portals 的使用

    通常,組件會渲染到 root 節(jié)點(diǎn)下??墒褂?Portals 將組件渲染至其他節(jié)點(diǎn)。 添加 id 為 more、modal 的 div 元素 構(gòu)建 Modal.jsx, 通過 createPortal 把組件渲染到指定的 modal 節(jié)點(diǎn)下 構(gòu)建 App.jsx 查看渲染結(jié)果

    2024年02月16日
    瀏覽(47)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包