最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React?Hook之使用State?Hook的方法

 更新時間:2022年03月16日 11:33:43   作者:zju_cbw  
這篇文章主要為大家詳細介紹了React使用State?Hook的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

Hook 簡介章節(jié)中使用下面的例子介紹了 Hook:

import React, { useState, useEffect } from 'react';
function Example() {
  const [count, setCount] = useState(0);
  // Similar to componentDidMount and componentDidUpdate:
  useEffect(() => {
    // Update the document title using the browser API
    document.title = `You clicked ${count} times`;
  });
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

我們將通過將這段代碼與一個等價的 class 示例進行比較來開始學習 Hook。

等價的 class 示例

如果你之前在 React 中使用過 class,這段代碼看起來應該很熟悉:

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }
  render() {
    return (
      <div>
        <p>You clicked {this.state.count} times</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Click me
        </button>
      </div>
    );
  }
}

state 初始值為 { count: 0 } ,當用戶點擊按鈕后,我們通過調用 this.setState() 來增加 state.count。整個章節(jié)中都將使用該 class 的代碼片段做示例。

Hook 和函數(shù)組件

復習一下, React 的函數(shù)組件是這樣的:

const Example = (props) => {
  // 你可以在這使用 Hook
  return <div />;
}

或是這樣:

function Example(props) {
  // 你可以在這使用 Hook
  return <div />;
}

你之前可能把它們叫做“無狀態(tài)組件”。但現(xiàn)在我們?yōu)樗鼈円肓耸褂?React state 的能力,所以我們更喜歡叫它”函數(shù)組件”。

Hook 在 class 內部是不起作用的。但你可以使用它們來取代 class 。

Hook 是什么?

在新示例中,首先引入 React 中 useState 的 Hook

import React, { useState } from 'react';
function Example() {
  // ...
}
  • Hook 是什么? Hook 是一個特殊的函數(shù),它可以讓你“鉤入” React 的特性。例如,useState 是允許你在 React 函數(shù)組件中添加 state 的 Hook。稍后我們將學習其他 Hook。
  • 什么時候我會用 Hook? 如果你在編寫函數(shù)組件并意識到需要向其添加一些 state,以前的做法是必須將其轉化為 class。現(xiàn)在你可以在現(xiàn)有的函數(shù)組件中使用 Hook。

聲明 State 變量

在 class 中,我們通過在構造函數(shù)中設置 this.state 為 { count: 0 } 來初始化 count state 為 0

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }

在函數(shù)組件中,我們沒有 this,所以我們不能分配或讀取 this.state。我們直接在組件中調用 useState Hook:

import React, { useState } from 'react';
function Example() {
  // 聲明一個叫 “count” 的 state 變量
  const [count, setCount] = useState(0);
  • 調用 useState 方法的時候做了什么? 它定義一個 “state 變量”。我們的變量叫 count, 但是我們可以叫他任何名字,比如 banana。這是一種在函數(shù)調用時保存變量的方式 —— useState 是一種新方法,它與 class 里面的 this.state 提供的功能完全相同。一般來說,在函數(shù)退出后變量就會”消失”,而 state 中的變量會被 React 保留。
  • useState 需要哪些參數(shù)? useState() 方法里面唯一的參數(shù)就是初始 state。不同于 class 的是,我們可以按照需要使用數(shù)字或字符串對其進行賦值,而不一定是對象。在示例中,只需使用數(shù)字來記錄用戶點擊次數(shù),所以我們傳了 0 作為變量的初始 state。(如果我們想要在 state 中存儲兩個不同的變量,只需調用 useState() 兩次即可。)
  • useState 方法的返回值是什么? 返回值為:當前 state 以及更新 state 的函數(shù)。這就是我們寫 const [count, setCount] = useState() 的原因。這與 class 里面 this.state.count 和 this.setState 類似,唯一區(qū)別就是你需要成對的獲取它們。如果你不熟悉我們使用的語法,我們會在本章節(jié)的底部介紹它。

既然我們知道了 useState 的作用,我們的示例應該更容易理解了:

import React, { useState } from 'react';
function Example() {
  // 聲明一個叫 "count" 的 state 變量
  const [count, setCount] = useState(0);

我們聲明了一個叫 count 的 state 變量,然后把它設為 0。React 會在重復渲染時記住它當前的值,并且提供最新的值給我們的函數(shù)。我們可以通過調用 setCount 來更新當前的 count

注意

你可能想知道:為什么叫 useState 而不叫 createState?

“Create” 可能不是很準確,因為 state 只在組件首次渲染的時候被創(chuàng)建。在下一次重新渲染時,useState 返回給我們當前的 state。否則它就不是 state 了!這也是 Hook 的名字總是以 use 開頭的一個原因。我們將在后面的 Hook 規(guī)則中了解原因。

讀取 State

當我們想在 class 中顯示當前的 count,我們讀取 this.state.count

  <p>You clicked {this.state.count} times</p>

在函數(shù)中,我們可以直接用 count:

  <p>You clicked {count} times</p>

更新 State

在 class 中,我們需要調用 this.setState() 來更新 count 值:

 <button onClick={() => this.setState({ count: this.state.count + 1 })}>
    Click me
  </button>

在函數(shù)中,我們已經有了 setCount 和 count 變量,所以我們不需要 this:

  <button onClick={() => setCount(count + 1)}>
    Click me
  </button>

小結

現(xiàn)在讓我們來仔細回顧一下學到的知識,看下我們是否真正理解了。

import React, { useState } from 'react';
function Example() {
	const [count, setCount] = useState(0);
	return (
      <div>
        <p>You clicked {count} times</p>
        <button onClick={() => setCount(count + 1)}>
         Click me
        </button>
      </div>
   );
}
  • 第一行 - 引入React 中的 useState Hook。它讓我們在函數(shù)組件中存儲內部 state。
  • 第四行 - 在 Example 組件內部,我們通過調用 useState Hook 聲明了一個新的 state 變量。它返回一對值給到我們命名的變量上。我們把變量命名為 count,因為它存儲的是點擊次數(shù)。我們通過傳 0 作為 useState 唯一的參數(shù)來將其初始化為 0。第二個返回的值本身就是一個函數(shù)。它讓我們可以更新 count 的值,所以我們叫它 setCount
  • 第九行 - 當用戶點擊按鈕后,我們傳遞一個新的值給 setCount。React 會重新渲染 Example 組件,并把最新的 count 傳給它。

提示:方括號有什么用?

你可能注意到我們用方括號定義了一個 state 變量

const [count, setCount] = useState(0);

等號左邊名字并不是 React API 的部分,你可以自己取名字:

const [fruit, setFruit] = useState('banana');

這種 JavaScript 語法叫數(shù)組解構。它意味著我們同時創(chuàng)建了 fruit 和 setFruit 兩個變量,fruit 的值為 useState 返回的第一個值,setFruit 是返回的第二個值。它等價于下面的代碼:

  var fruitStateVariable = useState('banana'); // 返回一個有兩個元素的數(shù)組
  var fruit = fruitStateVariable[0]; // 數(shù)組里的第一個值
  var setFruit = fruitStateVariable[1]; // 數(shù)組里的第二個值

當我們使用 useState 定義 state 變量時候,它返回一個有兩個值的數(shù)組。第一個值是當前的 state,第二個值是更新 state 的函數(shù)。使用 [0] 和 [1] 來訪問有點令人困惑,因為它們有特定的含義。這就是我們使用數(shù)組解構的原因。

提示:使用多個 state 變量

將 state 變量聲明為一對 [something, setSomething] 也很方便,因為如果我們想使用多個 state 變量,它允許我們給不同的 state 變量取不同的名稱:

function ExampleWithManyStates() {
  // 聲明多個 state 變量
  const [age, setAge] = useState(42);
  const [fruit, setFruit] = useState('banana');
  const [todos, setTodos] = useState([{ text: '學習 Hook' }]);

在以上組件中,我們有局部變量 agefruit 和 todos,并且我們可以單獨更新它們:

  function handleOrangeClick() {
    // 和 this.setState({ fruit: 'orange' }) 類似
    setFruit('orange');
  }

不必使用多個 state 變量。State 變量可以很好地存儲對象和數(shù)組,因此,你仍然可以將相關數(shù)據(jù)分為一組。然而,不像 class 中的 this.setState,更新 state 變量總是替換它而不是合并它。

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容! 

相關文章

  • react-router實現(xiàn)跳轉傳值的方法示例

    react-router實現(xiàn)跳轉傳值的方法示例

    這篇文章主要給大家介紹了關于react-router實現(xiàn)跳轉傳值的相關資料,文中給出了詳細的示例代碼,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-05-05
  • 基于PixiJS實現(xiàn)react圖標旋轉動效

    基于PixiJS實現(xiàn)react圖標旋轉動效

    PixiJS是一個開源的基于web的渲染系統(tǒng),為游戲、數(shù)據(jù)可視化和其他圖形密集型項目提供了極快的性能,這篇文章主要介紹了用PixiJS實現(xiàn)react圖標旋轉動效,需要的朋友可以參考下
    2022-05-05
  • React大屏可視化腳手架教程示例

    React大屏可視化腳手架教程示例

    這篇文章主要為大家介紹了React大屏可視化腳手架教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 詳解React中常見的三種路由處理方式選擇

    詳解React中常見的三種路由處理方式選擇

    這篇文章主要為大家詳細介紹了React中常見的三種路由處理方式該如何選擇,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • React Component存在的幾種形式詳解

    React Component存在的幾種形式詳解

    這篇文章主要給大家介紹了關于React Component存在的幾種形式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • 聊聊jenkins部署vue/react項目的問題

    聊聊jenkins部署vue/react項目的問題

    本文給大家介紹了jenkins部署vue/react項目的問題,文末給大家提到了centOS安裝jenkins的腳本,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02
  • React根據(jù)寬度自適應高度的示例代碼

    React根據(jù)寬度自適應高度的示例代碼

    本篇文章主要介紹了React根據(jù)寬度自適應高度的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • react-router-domV6版本改版踩坑記錄

    react-router-domV6版本改版踩坑記錄

    這篇文章主要介紹了react-router-domV6版本改版踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React Native第三方平臺分享的實例(Android,IOS雙平臺)

    React Native第三方平臺分享的實例(Android,IOS雙平臺)

    本篇文章主要介紹了React Native第三方平臺分享的實例(Android,IOS雙平臺),具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • React?組件傳?children?的各種案例方案詳解

    React?組件傳?children?的各種案例方案詳解

    自定義組件的時候往往需要傳?children,由于寫法比較多樣,我就總結了一下,要自定義的組件其中包含一個?title?和一個?children,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10

最新評論

彝良县| 柳河县| 广水市| 沭阳县| 合川市| 江安县| 莱西市| 咸宁市| 扶余县| 宾川县| 会泽县| 浠水县| 墨竹工卡县| 芮城县| 西充县| 玉龙| 武城县| 临潭县| 江孜县| 黄梅县| 桃园市| 怀安县| 铅山县| 高雄市| 汽车| 嵊泗县| 兰坪| 林西县| 闽侯县| 上饶市| 永德县| 师宗县| 云梦县| 岳阳县| 东台市| 沁阳市| 天长市| 榆树市| 麦盖提县| 通州区| 怀远县|