」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 關於 React useState Hook 你需要了解的一切 - 裡面的實際例子

關於 React useState Hook 你需要了解的一切 - 裡面的實際例子

發佈於2024-11-08
瀏覽:497

Everything You Need to Know About React useState Hook – Practical Examples Inside

ReactJS useState Hook:初学者指南

介绍

ReactJS 是一个用于构建用户界面的流行 JavaScript 库,引入了 hooks 来简化和增强组件逻辑。 React 中最常用的钩子之一是 useState 钩子,它管理组件的状态。了解其工作原理可以帮助您释放 React 的全部潜力。

在本初学者指南中,我们将探讨什么是钩子、如何使用 useState 初始化和更新状态,并深入探讨保持和更新各种类型的状态。最后,您将能够自信地管理组件内的状态。让我们一起来吧!

什么是钩子?

React 中的钩子

Hooks 是允许您使用 state 和其他 React 功能而无需编写类组件的函数。在钩子之前,管理组件状态只能在类组件内部进行。使用 useState 这样的钩子,您可以向功能组件添加状态,使它们更加通用。

React提供了几种hook,例如:

  • useState – 用于管理状态。
  • useEffect – 用于获取数据等副作用。
  • useContext – 用于管理应用程序中的上下文。

挂钩简化了状态管理并减少了对复杂的基于类的组件的需求。钩子的美妙之处在于它们能够提供您所需的功能,同时保持更清晰、更易读的代码。


如何初始化 useState

基本初始化

在功能组件中初始化 useState 很简单。首先从 React 导入钩子并在组件内调用它。语法如下:

import React, { useState } from 'react';

function Counter() {
  // Declare state variable and its updater function
  const [count, setCount] = useState(0);

  return (
    

You clicked {count} times

); }

分解:

  • useState(0) 初始化状态,初始值为 0。
  • count是状态变量,setCount是用于更新此状态的函数
  • 每次单击按钮时,状态都会更新,并且组件会使用新值重新渲染。

如何读取状态

访问当前状态

读取当前状态很简单。您只需直接在 JSX 中使用状态变量(上例中的 count)即可。由于 React 在状态更改时重新渲染组件,因此更新后的值会自动反映在 UI 中。

让我们调整一下之前的示例来展示如何访问状态:

Current count: {count}

此代码访问计数状态并动态显示它。


如何更新状态

使用状态设置器函数

React 中的更新状态是使用 useState 中的第二个元素完成的,即 setter 函数。此函数采用更新后的值并以新状态重新渲染组件。

以下是如何递增和递减计数器的示例:



React 确保每当状态更新时,更改都会无缝地反映在 UI 中。重要的是要记住,React 中的状态更新是异步的,这意味着在调用 setter 函数后您不会总是立即看到更新的状态。


国家可以持有什么?

不同类型的价值观

React中的State可以保存多种数据类型,包括:

  • 基本类型,如数字、字符串和布尔值。
  • 对象数组.
  • 未定义值。

让我们看一下这些示例:

将字符串保存在状态中:

const [name, setName] = useState("John");

将数组保存在状态中:

const [items, setItems] = useState([1, 2, 3]);

将对象保持在状态中:

const [user, setUser] = useState({ name: "John", age: 30 });

React 的 useState 钩子允许您管理这些不同类型的数据,但在更新复杂类型(例如对象和数组)时必须小心,我们接下来将探讨。


更新状态中的对象和数组

不可变的更新

在 React 中使用对象或数组时,至关重要的是不可变地更新它们。 React 不会深入比较嵌套对象,因此直接修改对象不会触发重新渲染。相反,您必须使用更新的值创建新对象数组

示例:更新对象

const [user, setUser] = useState({ name: "John", age: 30 });

function updateName() {
  setUser(prevState => ({
    ...prevState,
    name: "Doe"
  }));
}

在此示例中:

  • 我们使用 ...prevState 将现有状态 (prevState) 传播到一个新对象中。
  • 然后,我们修改 name 属性而不改变原始用户对象。

示例:更新数组

const [items, setItems] = useState([1, 2, 3]);

function addItem() {
  setItems(prevItems => [...prevItems, 4]);
}

这里:

  • 我们展开前一个数组 (prevItems) 并附加新项目 (4),创建一个新数组。

常见问题解答部分

为什么使用 useState 而不是基于类的状态?

钩子,如 useState,简化了功能组件内的状态管理,使代码比类组件更具可读性并且更简洁。

useState 可以保存多种数据类型吗?

是的,useState 可以保存字符串、数字、数组、对象、布尔值,甚至 null 或未定义的值。

更新状态是异步的吗?

是的,React 批量更新状态,调用 setter 函数后更改可能不会立即反映。

如何更新对象或数组等复杂状态?

为了避免改变原始状态,请始终创建对象或数组的副本,然后使用扩展运算符 (...) 对其进行不可变的更新。


结论

useState 钩子是 React 中最强大、最常用的钩子之一。它可以帮助您管理功能组件内的本地状态,使您的 React 代码更干净、更高效。无论您是处理简单变量还是复杂对象和数组,了解如何正确使用和更新状态是构建动态 React 应用程序的关键。继续练习,很快你就会轻松掌握 React 的状态管理!

现在您已经通过 useState 从零变成了英雄,尝试将其合并到您的项目中,看看 React 的神奇之处!

版本聲明 本文轉載於:https://dev.to/chintanonweb/everything-you-need-to-know-about-react-usestate-hook-practical-examples-inside-fda?1如有侵犯,請聯絡study_golang@163 .com刪除
最新教學 更多>
  • 如何繞過驗證碼
    如何繞過驗證碼
    No matter how many times people wrote that the captcha has outlived itself long time ago and no longer works as effectively as its developers would ha...
    程式設計 發佈於2024-11-08
  • 使用 super 呼叫超類別建構函數
    使用 super 呼叫超類別建構函數
    子類別可以使用 super(parameter-list);. 形式來呼叫其超類別定義的建構函數 parameter-list 必須指定超類別建構子所需的參數。 子類別建構子中執行的第一條語句必須始終是 super(); (或 super(parameter-list); 如果需要傳遞參數). ...
    程式設計 發佈於2024-11-08
  • 你能比較 C++ 中不同容器的迭代器嗎?
    你能比較 C++ 中不同容器的迭代器嗎?
    比較來自不同容器的迭代器:一個警示故事在C 中,迭代器提供了一個強大的遍歷集合的機制。然而,在使用來自不同容器的迭代器時,重要的是要意識到這些限制。 比較不同容器的迭代器是否合法的問題經常出現。考慮以下範例:std::vector<int> foo; std::vector<int...
    程式設計 發佈於2024-11-08
  • 幫助 FastAPI:如何為文件翻譯做出貢獻
    幫助 FastAPI:如何為文件翻譯做出貢獻
    One of the great features of FastAPI is its great documentation ?. But wouldn't it be better if more people around the world had access to this docume...
    程式設計 發佈於2024-11-08
  • 如何使用 CSS 和 AngularJS 建立垂直 HTML 表格?
    如何使用 CSS 和 AngularJS 建立垂直 HTML 表格?
    垂直HTML 表格創建具有垂直行的HTML 表格提供了一種獨特的方式來顯示數據,行標題位於左側而不是頂部。要實現此目的,可以套用 CSS 樣式來轉換表格的結構。 CSS 樣式若要將表格行呈現為垂直列,請遵循下列CSS 規則可使用:tr { display: block; float: lef...
    程式設計 發佈於2024-11-08
  • 透過自訂 Hooks 在 React 中重複使用邏輯:實用指南
    透過自訂 Hooks 在 React 中重複使用邏輯:實用指南
    自訂鉤子是React 中的一項強大功能,與React 內建鉤子不同,它用於更具體的目的,並且它是透過將常見功能封裝到獨立函數中來完成的。自訂掛鉤促進可重複使用性、改進元件組織並整體增強程式碼可維護性。 在本指南中,我們將深入探討使用自訂鉤子的目的,以了解創建自訂鉤子的基礎知識以及如何使用其他元件。...
    程式設計 發佈於2024-11-08
  • 使用 ReactJS 建立免費的 AI 圖像生成器
    使用 ReactJS 建立免費的 AI 圖像生成器
    开发者们大家好, 今天,我将向您展示如何使用 ReactJS 创建图像生成器,并且完全可以免费使用,这要感谢黑森林实验室和 Together AI。 第 1 步:设置项目 在本教程中,我们将使用 Vite 来初始化应用程序并使用 Shadcn 来初始化 UI。我假设您已经设置了项目并...
    程式設計 發佈於2024-11-08
  • 字串中的串聯或大括號:哪種方法可以優化效能和美觀?
    字串中的串聯或大括號:哪種方法可以優化效能和美觀?
    字串中的變數連結與大括號:評估效能與美觀在字串操作領域,開發人員經常面臨兩難境地:他們應該連接字串中的變數還是選擇花括號?每種方法都有自己的優點和缺點,我們將深入研究這些優點和缺點,以提供明智的決策。 串聯:傳統方法串聯涉及使用以下方法將變數附加到字串這 '。 '操作員。雖然這種方法...
    程式設計 發佈於2024-11-08
  • 我嘗試過花崗岩。
    我嘗試過花崗岩。
    花岗岩3.0 Granite 3.0 是一个开源、轻量级的生成语言模型系列,专为一系列企业级任务而设计。它原生支持多语言功能、编码、推理和工具使用,使其适合企业环境。 我测试了运行这个模型,看看它可以处理哪些任务。 环境设置 我在Google Colab中设置了Gr...
    程式設計 發佈於2024-11-08
  • 掌握 JavaScript 函數:開發人員綜合指南
    掌握 JavaScript 函數:開發人員綜合指南
    JavaScript Functions A JavaScript function is a block of code designed to perform a particular task. A JavaScript function is executed when "...
    程式設計 發佈於2024-11-08
  • Go 中的機率提前過期
    Go 中的機率提前過期
    关于缓存踩踏 我经常遇到需要缓存这个或那个的情况。通常,这些值会被缓存一段时间。您可能熟悉这种模式。您尝试从缓存中获取一个值,如果成功,则将其返回给调用者并结束。如果该值不存在,您将获取它(很可能从数据库中)或计算它并将其放入缓存中。在大多数情况下,这非常有效。但是,如果您用于缓存...
    程式設計 發佈於2024-11-08
  • Next.js 快取:透過高效的資料獲取來增強您的應用程式
    Next.js 快取:透過高效的資料獲取來增強您的應用程式
    Next.js 中的快取不僅是為了節省時間,還在於減少冗餘網路請求、保持資料新鮮並使您的應用程式像搖滾明星一樣運作。 無論您是想將資料快取更長時間還是按需刷新,Next.js 都能為您提供所需的所有工具。在本文中,我們將詳細介紹如何在 Next.js 中有效地使用快取 Next.js 擴充了 fe...
    程式設計 發佈於2024-11-08
  • 為什麼我的 Go 模板條件檢查失敗?
    為什麼我的 Go 模板條件檢查失敗?
    Go 範本:條件檢查故障排除在 Go 範本渲染中,結構體欄位的條件檢查有時無法如預期運作。考慮以下範例,其中 bool 欄位 isOrientRight 未正確計算:type Category struct { ImageURL string
    程式設計 發佈於2024-11-08
  • 如何解決 MySQL 時區錯誤:Java 中的「伺服器時區值中歐時間」?
    如何解決 MySQL 時區錯誤:Java 中的「伺服器時區值中歐時間」?
    MySQL 連接器在Java 資料庫連線期間出現「伺服器時區值中歐時間」錯誤使用建立資料庫連線時會出現此問題Java 中的MySQL 連接器。此錯誤訊息表示提供的伺服器時區值「中歐時間」無法辨識或代表多個時區。若要解決此問題,必須使用 serverTimezone 設定屬性明確指定伺服器時區值。 常...
    程式設計 發佈於2024-11-08
  • 為什麼應該避免在 JSX Props 中使用箭頭函數或綁定?
    為什麼應該避免在 JSX Props 中使用箭頭函數或綁定?
    為什麼在JSX Props 中使用箭頭函數或Bind 是禁忌使用React 時,避免使用箭頭函數或Bind 非常重要在JSX屬性中綁定。這種做法可能會導致效能問題和不正確的行為。 效能問題在 JSX props 中使用箭頭函數或綁定會強制在每次渲染時重新建立這些函數。這意味著:舊函數被丟棄,觸發垃圾...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3