国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

4 個(gè) useState Hook 示例

ZweiZhao / 2021人閱讀

摘要:示例使用顯示隱藏組件這個(gè)示例是一個(gè)組件,它顯示一些文本,并在末尾顯示一個(gè)鏈接,當(dāng)單擊鏈接時(shí),它展開(kāi)剩下的文本。還有一個(gè)處理提交的函數(shù),其中,來(lái)阻止頁(yè)面刷新并打印出表單值。它使用傳遞一個(gè)對(duì)象,為了確保現(xiàn)有的狀態(tài)不被覆蓋,這里使用了展開(kāi)運(yùn)算。

為了保證的可讀性,本文采用意譯而非直譯。

想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你!

到 React 16.8 目前為止,如果編寫(xiě)函數(shù)組件,然后遇到需要添加狀態(tài)的情況,咱們就必須將組件轉(zhuǎn)換為類組件。

編寫(xiě) class Thing extends React.Component,將函數(shù)體復(fù)制到render()方法中,修復(fù)縮進(jìn),最后添加需要的狀態(tài)。

今天,可以使用 Hook 獲得相同的功能,并為自己節(jié)省了工作時(shí)間。在本文中,主要介紹useState hook。

useState 做啥子的

useState hook 允許咱們向函數(shù)組件添加狀態(tài),我們通常稱這些為“ hooks”,但它們實(shí)際上是函數(shù),與 React 16.8 捆綁在一起。 通過(guò)在函數(shù)組件中調(diào)用useState,就會(huì)創(chuàng)建一個(gè)多帶帶的狀態(tài)。

在類組件中,state 總是一個(gè)對(duì)象,可以在該對(duì)象上添加保存屬性。

對(duì)于 hooks,state 不必是對(duì)象,它可以是你想要的任何類型-數(shù)組、數(shù)字、布爾值、字符串等等。每次調(diào)用useState都會(huì)創(chuàng)建一個(gè)state塊,其中包含一個(gè)值。

示例:使用 useState 顯示/隱藏組件

這個(gè)示例是一個(gè)組件,它顯示一些文本,并在末尾顯示一個(gè)read more鏈接,當(dāng)單擊鏈接時(shí),它展開(kāi)剩下的文本。

import React, { useState } from "react";
import ReactDOM from "react-dom";

// 兩個(gè) props:
//   text - 顯示的內(nèi)容
//   maxLength - 在點(diǎn)擊“read more”之前顯示多少個(gè)字符
function LessText({ text, maxLength }) {
  // 創(chuàng)建一個(gè)狀態(tài),并將其初始化為“true”
  const [hidden, setHidden] = useState(true);


  if (text <= maxLength) {
    return {text};
  }

  return (
    
      {hidden ? `${text.substr(0, maxLength).trim()} ...` : text}
      {hidden ? (
         setHidden(false)}> read more
      ) : (
         setHidden(true)}> read less
      )}
    
  );
}

ReactDOM.render(
  ,
  document.querySelector("#root")
);

僅用一行代碼,我們就使這個(gè)函數(shù)組件有狀態(tài):

const [hidden, setHidden] = useState(true);

但是這個(gè)函數(shù)到底在做什么呢?如果每次渲染都調(diào)用它(確實(shí)如此),它又是如何保留狀態(tài)的。

Hooks 實(shí)現(xiàn)的技巧

這里的“神奇”之處是,React在每個(gè)組件的幕后維護(hù)一個(gè)對(duì)象,并且在這個(gè)持久對(duì)象中,有一個(gè)“狀態(tài)單元”數(shù)組。當(dāng)你調(diào)用useState時(shí),React將該狀態(tài)存儲(chǔ)在下一個(gè)可用的單元格中,并遞增數(shù)組索引。

假設(shè)你的 hooks 總是以相同的順序調(diào)用(如果遵循 hooks 的規(guī)則,它們將是相同的順序),React能夠查找特定useState調(diào)用的前一個(gè)值。對(duì)useState的第一個(gè)調(diào)用存儲(chǔ)在第一個(gè)數(shù)組元素中,第二個(gè)調(diào)用存儲(chǔ)在第二個(gè)元素中,依此類推。

這也不是很神奇的事情,主要它依賴于你可能沒(méi)有想過(guò)的事實(shí):咱們寫(xiě)的的組件是由React調(diào)用 ,所以它可以在調(diào)用組件之前事先做好一些工作。 而且,渲染組件的行為不僅僅是函數(shù)調(diào)用。 像這樣的JSX被編譯為React.createElement(Thing) - 顯然 React 可以控制它的調(diào)用方式和時(shí)間。

示例:根據(jù)之前的狀態(tài)更新?tīng)顟B(tài)

看看另一個(gè)例子:根據(jù)前一個(gè)值更新state的值。

咱們要造個(gè)計(jì)步器,每點(diǎn)擊一次按鈕,就計(jì)一次,點(diǎn)擊完后,它會(huì)告訴你你走了多少步。

import React, { useState } from "react";

function StepTracker() {
  const [steps, setSteps] = useState(0);

  function increment() {
    setSteps(steps => steps + 1);
  }

  return (
    
總共走了 {steps} 步!
); } ReactDOM.render( , document.querySelector("#root") );

首先,通過(guò)調(diào)用useState創(chuàng)建一個(gè)新的state,并將其初始化為0。它返回steps的當(dāng)前值0setSteps函數(shù)來(lái)更新 steps,用 increment函數(shù)來(lái)對(duì)steps進(jìn)行增 1 操作。

這里還可以優(yōu)化的提取increment函數(shù),可以直接將 increment 函數(shù)里面的內(nèi)聯(lián)到 onClick 里面:



示例:state 作為數(shù)組

記住,state可以保存任何你想要的值。下面是一個(gè)隨機(jī)數(shù)列表的例子,單擊按鈕將向列表添加一個(gè)新的隨機(jī)數(shù):

function RandomList() {
  const [items, setItems] = useState([]);

  const addItem = () => {
    setItems([
      ...items,
      {
        id: items.length,
        value: Math.random() * 100
      }
    ]);
  };

  return (
    <>
      
      
    {items.map(item => (
  • {item.value}
  • ))}
); }

注意,我們state初始化為空數(shù)組[],并在addItem函數(shù)中更新值。

setItems 更新 state 不會(huì)將舊值“合并” - 它會(huì)使用新值覆蓋state。 這與this.setState在類中的工作方式不同。

示例:具有多個(gè)鍵的 state

再來(lái)看看,state為對(duì)象的例子,創(chuàng)建一個(gè)包含2個(gè)字段的登錄表單:usernamepassword

下面示例主要展示如何在一個(gè)state對(duì)象中存儲(chǔ)多個(gè)值,以及如何更新單個(gè)值。

function LoginForm() {
  const [form, setValues] = useState({
    username: "",
    password: ""
  });

  const printValues = e => {
    e.preventDefault();
    console.log(form.username, form.password);
  };

  const updateField = e => {
    setValues({
      ...form,
      [e.target.name]: e.target.value
    });
  };

  return (
    


); }

如果想試試,可查看 CodeSandbox。

首先,我們創(chuàng)建一個(gè)state片段,并用一個(gè)對(duì)象初始化它

const [form, setValues] = useState({
  username: "",
  password: ""
})

這看起來(lái)像是在類中初始化狀態(tài)的方式。

還有一個(gè)處理提交的函數(shù),其中,e.preventDefault來(lái)阻止頁(yè)面刷新并打印出表單值。

updateField函數(shù)更有意思。它使用setValues傳遞一個(gè)對(duì)象,為了確?,F(xiàn)有的狀態(tài)不被覆蓋,這里使用了展開(kāi)運(yùn)算(...form)。

代碼部署后可能存在的BUG沒(méi)法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具 Fundebug。

交流

干貨系列文章匯總?cè)缦拢X(jué)得不錯(cuò)點(diǎn)個(gè)Star,歡迎 加群 互相學(xué)習(xí)。

https://github.com/qq44924588...

我是小智,公眾號(hào)「大遷世界」作者,對(duì)前端技術(shù)保持學(xué)習(xí)愛(ài)好者。我會(huì)經(jīng)常分享自己所學(xué)所看的干貨,在進(jìn)階的路上,共勉!

關(guān)注公眾號(hào),后臺(tái)回復(fù)福利,即可看到福利,你懂的。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/110061.html

相關(guān)文章

  • 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 的新增特性。它可以讓你在不編寫(xiě) class 的情況下使用 state 以及其他的 React 特性。 us...

    hlcfan 評(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
  • 03. 該嘗嘗React Hook了。

    摘要:我們統(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ī)則: ...

    cikenerd 評(píng)論0 收藏0
  • React Hooks入門

    摘要:組件的職責(zé)增長(zhǎng)并變得不可分割。是架構(gòu)的重要組成部分。有許多好處,但它們?yōu)槌鯇W(xué)者創(chuàng)造了入門的障礙。方法使用狀態(tài)鉤子的最好方法是對(duì)其進(jìn)行解構(gòu)并設(shè)置原始值。第一個(gè)參數(shù)將用于存儲(chǔ)狀態(tài),第二個(gè)參數(shù)用于更新?tīng)顟B(tài)。 學(xué)習(xí)目標(biāo) 在本文結(jié)束時(shí),您將能夠回答以下問(wèn)題: 什么是 hooks? 如何使用hooks? 使用hooks的一些規(guī)則? 什么是custom hook(自定義鉤子)? 什么時(shí)候應(yīng)該使用 ...

    zhangke3016 評(píng)論0 收藏0
  • React Hook起飛指南

    摘要:起飛指南作者元瀟方凳雅集出品目前放出來(lái)了個(gè)內(nèi)置,但僅僅基于以下兩個(gè),就能做很多事情。行代碼實(shí)現(xiàn)一個(gè)全局元瀟根組件掛上即可子組件調(diào)用隨時(shí)隨地實(shí)現(xiàn)一個(gè)局部元瀟的本質(zhì)是的一個(gè)語(yǔ)法糖,感興趣可以閱讀一下的類型定義和實(shí)現(xiàn)。 React Hook起飛指南 作者:元瀟 方凳雅集出品 16.8目前放出來(lái)了10個(gè)內(nèi)置hook,但僅僅基于以下兩個(gè)API,就能做很多事情。所以這篇文章不會(huì)講很多API,...

    姘擱『 評(píng)論0 收藏0

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

0條評(píng)論

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