成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

03. 該嘗嘗React Hook了。

cikenerd / 1500人閱讀

摘要:我們統(tǒng)一把這些操作稱為副作用,或者簡(jiǎn)稱為作用。盡可能使用標(biāo)準(zhǔn)的以避免阻塞視覺(jué)更新。大多數(shù)情況下,不需要同步地執(zhí)行。返回的對(duì)象在組件的整個(gè)生命周期內(nèi)保持不變。當(dāng)對(duì)象內(nèi)容發(fā)生變化時(shí),并不會(huì)通知你。

Hook

Hook 是 React 16.8.0 的新增特性。

Hook 使你在非 class 的情況下可以使用更多的 React 特性。Hook 不能在 class 組件中使用。

使用規(guī)則:

只能在函數(shù)最外層調(diào)用 Hook。不要在循環(huán)、條件判斷或者子函數(shù)中調(diào)用。

只能在 React 的函數(shù)組件中調(diào)用 Hook。不要在其他 JavaScript 函數(shù)中調(diào)用。

State Hook
useState

使用useState可以不通過(guò)class組件而在函數(shù)組件內(nèi)使用state,可通過(guò)多次調(diào)用聲明多個(gè)state

參數(shù):

useState() 方法里面唯一的參數(shù)就是初始 state。

返回值:

當(dāng)前 state 以及更新 state 的函數(shù)。

函數(shù)式更新:

如果新的 state 需要通過(guò)使用先前的 state 計(jì)算得出,那么可以將函數(shù)傳遞給 setState。該函數(shù)將接收先前的 state,并返回一個(gè)更新后的值。

function Counter({initialCount}) {
  const [count, setCount] = useState(initialCount);
  return (
    <>
      Count: {count}
      
      
      
    
  );
}
Effect Hook

Effect Hook 可以讓你在函數(shù)組件中執(zhí)行副作用操作(在 React 組件中執(zhí)行過(guò)數(shù)據(jù)獲取、訂閱或者手動(dòng)修改過(guò) DOM。我們統(tǒng)一把這些操作稱為“副作用”,或者簡(jiǎn)稱為“作用”。)

useEffect

可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 這三個(gè)函數(shù)的組合。

useEffect 會(huì)在每次渲染后(第一次渲染之后和每次更新之后)都執(zhí)行,如果你的 effect 返回一個(gè)函數(shù),React 將會(huì)在組件卸載的時(shí)候執(zhí)行清除操作時(shí)調(diào)用它。

useEffect在組件內(nèi)可多次調(diào)用,Hook 允許我們按照代碼的用途分離他們,React 將按照 effect 聲明的順序依次調(diào)用組件中的每一個(gè) effect。

使用位置:

組件內(nèi)部調(diào)用 useEffect。 將 useEffect 放在組件內(nèi)部讓我們可以在 effect 中直接訪問(wèn) count state 變量(或其他 props)。

性能優(yōu)化:

useEffect 的第二個(gè)可選參數(shù)可以實(shí)現(xiàn)如果某些特定值在兩次重渲染之間沒(méi)有發(fā)生變化,你可以通知 React 跳過(guò)對(duì) effect 的調(diào)用。請(qǐng)確保數(shù)組中包含了所有外部作用域中會(huì)隨時(shí)間變化并且在 effect 中使用的變量

// 僅在 count 更改時(shí)更新
useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); 
示例代碼詳解 useStateuseEffect
// 引入 React 中的 useState Hook。它讓我們?cè)诤瘮?shù)組件中存儲(chǔ)內(nèi)部 state
// 引入 useEffect
import React, { useState, useEffect } from "react";

function Example(props) {
  // 聲明了一個(gè)叫 count 的 state 變量,然后把它設(shè)為 0
  const [count, setCount] = useState(0);
  // 聲明第2個(gè)state
  const [isOnline, setIsOnline] = useState(null);

  // 無(wú)需清除的 effect
  useEffect(() => {
    // 將 document 的 title 設(shè)置為包含了點(diǎn)擊次數(shù)的消息。
    document.title = `You clicked ${count} times`;
  });
  
  // 需要清除的 effect
  useEffect(() => {
    function handleFn(val) {
      setIsOnline(val);
    }
    // 注冊(cè)監(jiān)聽(tīng)
    XXAPI.subscribe(handleFn);
    // 清除監(jiān)聽(tīng)
    return () => {
      XXAPI.unsubscribe(handleFn);
    };
  });

  return (
    
// 讀取 State: 我們可以直接用 count

You clicked {count} times

// 更新 State: 可以通過(guò)調(diào)用 setCount 來(lái)更新當(dāng)前的 count
); }
useLayoutEffect

其函數(shù)簽名與 useEffect 相同,但它會(huì)在所有的 DOM 變更之后同步調(diào)用 effect。可以使用它來(lái)讀取 DOM 布局并同步觸發(fā)重渲染。在瀏覽器執(zhí)行繪制之前,useLayoutEffect 內(nèi)部的更新計(jì)劃將被同步刷新。盡可能使用標(biāo)準(zhǔn)的 useEffect 以避免阻塞視覺(jué)更新。

與 componentDidMount 或 componentDidUpdate 不同,使用 useEffect 調(diào)度的 effect 不會(huì)阻塞瀏覽器更新屏幕,這讓你的應(yīng)用看起來(lái)響應(yīng)更快。大多數(shù)情況下,effect 不需要同步地執(zhí)行。在個(gè)別情況下(例如測(cè)量布局),這時(shí)需要用到useLayoutEffect

useRef

useRef 返回一個(gè)可變的 ref 對(duì)象,其 .current 屬性被初始化為傳入的參數(shù)(initialValue)。返回的 ref 對(duì)象在組件的整個(gè)生命周期內(nèi)保持不變。

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    // `current` 指向已掛載到 DOM 上的文本輸入元素
    inputEl.current.focus();
  };
  return (
    <>
      
      
    
  );
}

useRef() 比 ref 屬性更有用。它可以很方便地保存任何可變值,其類似于在 class 中使用實(shí)例字段的方式。當(dāng) ref 對(duì)象內(nèi)容發(fā)生變化時(shí),useRef 并不會(huì)通知你。變更 .current 屬性不會(huì)引發(fā)組件重新渲染。

自定義Hook

自定義Hook 是一個(gè)函數(shù),其名稱以 use 開(kāi)頭(必須以 use 開(kāi)頭),函數(shù)內(nèi)部可以調(diào)用其他的 Hook。自定義Hook用于提取多組件之間的共享邏輯,可用于替代 render propsHOC

在需要共享邏輯的組件內(nèi)調(diào)用很簡(jiǎn)單,只需要引入定義好的自定義Hook,并傳入自己想要的參數(shù)拿到你想要的返回值作用于當(dāng)前組件。

如下例:

提取自定義Hook:

import React, { useState, useEffect } from "react";

function useFriendStatus(friendID) {
  const [isOnline, setIsOnline] = useState(null);

  useEffect(() => {
    function handleStatusChange(status) {
      setIsOnline(status.isOnline);
    }

    ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
    return () => {
      ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
    };
  });

  return isOnline;
}

使用自定義Hook:

function FriendListItem(props) {
  const isOnline = useFriendStatus(props.friend.id);

  return (
    
  • {props.friend.name}
  • ); }

    原文git地址 覺(jué)得有用的話,來(lái)個(gè)star鼓勵(lì),持續(xù)更新中。

    文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106656.html

    相關(guān)文章

    • react與redux通信之hook

      摘要:新方案隨著的發(fā)布,功能正式投入使用。那么,如果我們使用了,又該如何跟通信呢針對(duì)于這個(gè)問(wèn)題,業(yè)界有人提供了一個(gè)取代的新插件。提供的創(chuàng)建上下文,返回該對(duì)象。可以預(yù)見(jiàn)的是,當(dāng)你使用了,會(huì)在項(xiàng)目中逐漸把消滅,最后跟語(yǔ)法糖告別,回歸函數(shù)的世界。 react和redux建立通信的方式 有2種方案: 老方案connect 新方案hook 老方案connect 曾經(jīng),我們會(huì)使用connect建立r...

      lemon 評(píng)論0 收藏0
    • 快速React Hooks 原理

      摘要:使用該對(duì)象,可以跟蹤屬于組件的各種元數(shù)據(jù)位。調(diào)用你的組件這意味著它知道存儲(chǔ)的元數(shù)據(jù)對(duì)象。下一次渲染會(huì)發(fā)生什么需要重新渲染組件由于之前已經(jīng)看過(guò)這個(gè)組件,它已經(jīng)有了元數(shù)據(jù)關(guān)聯(lián)。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 我們大部分 React 類組件可以保存狀態(tài),而函數(shù)組件不能? 并且類組件具有生命周期,而函數(shù)組件卻不能...

      Hydrogen 評(píng)論0 收藏0
    • React Hook 不完全指南

      摘要:使用完成副作用操作,賦值給的函數(shù)會(huì)在組件渲染到屏幕之后。如此很容易產(chǎn)生,并且導(dǎo)致邏輯不一致。同時(shí),這也是很多人將與狀態(tài)管理庫(kù)結(jié)合使用的原因之一。當(dāng)我們通過(guò)的第二個(gè)數(shù)組類型參數(shù),指明當(dāng)前的依賴,就能避免不相關(guān)的執(zhí)行開(kāi)銷了。 前言 本文內(nèi)容大部分參考了 overreacted.io 博客一文,同時(shí)結(jié)合 React Hook 官方 文章,整理并歸納一些筆記和輸出個(gè)人的一些理解 什么是 Hoo...

      Lin_R 評(píng)論0 收藏0
    • 10分鐘react新特性hooks

      摘要:簡(jiǎn)介是的新增特性。我們統(tǒng)一把這些操作稱為副作用,或者簡(jiǎn)稱為作用。由于副作用函數(shù)是在組件內(nèi)聲明的,所以它們可以訪問(wèn)到組件的和。副作用函數(shù)還可以通過(guò)返回一個(gè)函數(shù)來(lái)指定如何清除副作用。目前為止,有兩種主流方案來(lái)解決這個(gè)問(wèn)題高階組件和。 Hook 簡(jiǎn)介 Hook 是 React 16.8 的新增特性。它可以讓你在不編寫 class 的情況下使用 state 以及其他的 React 特性。 us...

      hlcfan 評(píng)論0 收藏0
    • React Hooks入門: 基礎(chǔ)

      摘要:當(dāng)組件安裝和更新時(shí),回調(diào)函數(shù)都會(huì)被調(diào)用。好在為我們提供了第二個(gè)參數(shù),如果第二個(gè)參數(shù)傳入一個(gè)數(shù)組,僅當(dāng)重新渲染時(shí)數(shù)組中的值發(fā)生改變時(shí),中的回調(diào)函數(shù)才會(huì)執(zhí)行。 前言   首先歡迎大家關(guān)注我的Github博客,也算是對(duì)我的一點(diǎn)鼓勵(lì),畢竟寫東西沒(méi)法獲得變現(xiàn),能堅(jiān)持下去也是靠的是自己的熱情和大家的鼓勵(lì),希望大家多多關(guān)注呀!React 16.8中新增了Hooks特性,并且在React官方文檔中新增...

      mrli2016 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    最新活動(dòng)
    閱讀需要支付1元查看
    <