React State:深入淺出教學與最佳實務

更新於 發佈於 閱讀時間約 8 分鐘

基本介紹

在 React 中,state 是元件用來儲存會隨著使用者操作或事件改變而改變的「內部資料」。當 state 改變時,React 會重新渲染函式元件,以便 UI 與最新的資料保持同步。下面我們來說明如何使用 state。

總結兩點:

  • state 是組件內部的數據,用於保存動態資料。
  • 當 state 改變時,React 會重新渲染組件,也就是會更新html的顯示。

範例:

import React, { useState } from 'react';

function Counter() {
// 宣告一個 state 變數 count,初始值設為 0
const [count, setCount] = useState(0);

return (
<div>
<p>目前的計數:{count}</p>
<button onClick={() => setCount(prevCount => prevCount + 1)}>
增加
</button>
</div>
);
}

export default Counter;
  • useState(0):這裡傳入的 0 為 count 的初始值。
  • [count, setCount]count 為目前的 state 值,setCount 是用來更新 count 的函式,一定要使用setCount來變更count的狀態。
  • 每當點擊按鈕,setCount(count + 1) 就會更新 count,React 會重新渲染元件,並顯示最新的 count 值。
  • 當你呼叫 setCount時,React 可能不會立即更新 state,而是批次更新,這點在計算新的 state 時要特別注意。如果依賴舊的 state 值來計算新的 state,可以使用上述程式碼中的寫法:
  • 至於為甚麼: 當你呼叫 setCount 時,React 會將更新排入一個更新隊列,並在稍後批次處理這些更新,而不是立即更新 state。這樣做有助於提升效能,因為可以將多個更新合併後再一起渲染。為了避免這種情況,React 提供了可以接收上一個 state 值的函式寫法:
setCount(prevCount => prevCount + 1);

這樣,React 會保證 prevCount 是最新的 state 值,即使多個更新被批次處理,每一次的更新都會基於正確的先前 state 值。這就是「依賴舊的 state 值來計算新的 state」的意思。

下面提供三個例子,分別展示如何:

  1. 將 set 函式作為工具函式放入其他函式中:
import React, { useState } from 'react';

// 根據傳入的 amount 更新 state
function updateValue(setValue, amount) {
setValue(prevValue => prevValue + amount);
}

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

return (
<div>
<p>目前計數:{count}</p>
<button onClick={() => updateValue(setCount, 1)}>
增加
</button>
<button onClick={() => updateValue(setCount, -1)}>
減少
</button>
</div>
);
}

export default CounterUtility;
  • updateValue 接收 setValue 和一個數字 amount,利用函式寫法確保每次更新基於最新的 state。
  • 在元件中,按下「增加」或「減少」按鈕時,呼叫 updateValue,依照指定的數值更新 count
  1. 改變輸入框內容的例子
import React, { useState } from 'react';

function TextInputExample() {
const [text, setText] = useState('');

const handleChange = (event) => {
// event.target.value 是輸入框當前的值
setText(event.target.value);
};

return (
<div>
<input
type="text"
value={text}
onChange={handleChange} // 當輸入框內容改變時呼叫 handleChange
placeholder="請輸入文字"
/>
<p>你輸入的是:{text}</p>
</div>
);
}

export default TextInputExample;
  • 利用 useState 初始化 text 為空字串。
  • 每當使用者輸入或改變元素的值時,onChange事件就會觸發,並傳入一個合成事件物件。
  • 當輸入框內容改變時,handleChange 會被觸發,從 event 中取出最新的值並呼叫 setText 更新 state。
  • 畫面中會即時顯示最新輸入的內容。
  1. Color picker 顏色選擇器項目
import React, { useState } from 'react';

function ColorPicker() {
// 初始顏色設定為紅色
const [color, setColor] = useState('#ff0000');

const handleColorChange = (event) => {
setColor(event.target.value);
};

return (
<div>
<h2>選擇一個顏色</h2>
<input
type="color"
value={color}
onChange={handleColorChange}
/>
<p>目前選取的顏色:{color}</p>
<div
style={{
width: '100px',
height: '100px',
backgroundColor: color,
border: '1px solid #000',
marginTop: '10px'
}}
>
</div>
</div>
);
}

export default ColorPicker;
  • 初始顏色設定為紅色 #ff0000
  • 當使用者從顏色選擇器改變顏色時,handleColorChange 會更新 color state。
  • 透過內聯樣式,更新畫面上顯示的方塊背景顏色,使其與選取的顏色一致。
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!

































































在本章節,我們將深入探討 React onClick 事件,這是 React 中最常見的 事件處理機制,允許我們在使用者點擊元素時執行特定的動作。
在本章節,我們將探討 如何在 React JSX 中處理陣列 (Arrays),這是開發動態介面時必須掌握的關鍵技術。透過陣列,我們可以輕鬆地渲染動態清單 (Lists),例如待辦事項列表、產品清單或使用者資訊等。
在 React 中,我們可以利用 JavaScript 的條件運算特性,在 JSX 中根據狀態或 props 的不同,渲染不同內容。本章節會帶你快速入門這項知識並實際使用。
在本章節,我們將探討 React Props,這是 React 組件間 傳遞數據 的核心機制。Props (Properties) 允許父組件將數據傳遞給子組件,使組件變得更具動態性與重用性。 本章將透過 實際範例,讓你深入理解 React Props 的運作方式。
在 React 中,有三種主要方式可以套用 CSS 來設計和美化應用的外觀。每種方式都有不同的適用場景,本文都有詳細介紹:
React(也稱為React.js或ReactJS)是一個自由及開放原始碼的前端JavaScript工具庫,用於基於UI組件構建使用者介面。本章節會帶你初步建立環境並教導如何做使用。
在本章節,我們將深入探討 React onClick 事件,這是 React 中最常見的 事件處理機制,允許我們在使用者點擊元素時執行特定的動作。
在本章節,我們將探討 如何在 React JSX 中處理陣列 (Arrays),這是開發動態介面時必須掌握的關鍵技術。透過陣列,我們可以輕鬆地渲染動態清單 (Lists),例如待辦事項列表、產品清單或使用者資訊等。
在 React 中,我們可以利用 JavaScript 的條件運算特性,在 JSX 中根據狀態或 props 的不同,渲染不同內容。本章節會帶你快速入門這項知識並實際使用。
在本章節,我們將探討 React Props,這是 React 組件間 傳遞數據 的核心機制。Props (Properties) 允許父組件將數據傳遞給子組件,使組件變得更具動態性與重用性。 本章將透過 實際範例,讓你深入理解 React Props 的運作方式。
在 React 中,有三種主要方式可以套用 CSS 來設計和美化應用的外觀。每種方式都有不同的適用場景,本文都有詳細介紹:
React(也稱為React.js或ReactJS)是一個自由及開放原始碼的前端JavaScript工具庫,用於基於UI組件構建使用者介面。本章節會帶你初步建立環境並教導如何做使用。
你可能也想看
Google News 追蹤
Thumbnail
本文介紹了在網站開發中如何運用狀態機的原則和設計方法。通過具體案例分析,以及狀態和數據的區分,詳細介紹了狀態機的設計原則和應用。讀者可以通過本文瞭解如何將狀態機應用於實際的網站開發中。
setter和getter能把狀態改變時需做的事情包裝起來,讓外部只需簡單修改參數就能達到預想的效果
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
React Hooks 是 React 16.8 中引入的一組新的 API,允許你在函數組件中使用狀態和其他 React 特性,而不需要寫類組件。 狀態管理: useState 鉤子允許在函數組件中添加狀態。 副作用管理: useEffect 鉤子允許處理副作用,如數據獲取、訂閱和手動 DO
06. React Forms: Dynamically Add New Input Fields On Click || Learn React Through Mini Projects
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
React Props - React 白話文運動。這一篇則會針對 React 語法進一步做講解, 前幾篇也學會了如何建立一個 React 元件,並且學會了元件之間有父子元件的關係。這篇會介紹 React Props 的概念,包含了:React 元件宣告、React Props。
Thumbnail
本文介紹了在網站開發中如何運用狀態機的原則和設計方法。通過具體案例分析,以及狀態和數據的區分,詳細介紹了狀態機的設計原則和應用。讀者可以通過本文瞭解如何將狀態機應用於實際的網站開發中。
setter和getter能把狀態改變時需做的事情包裝起來,讓外部只需簡單修改參數就能達到預想的效果
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
React Hooks 是 React 16.8 中引入的一組新的 API,允許你在函數組件中使用狀態和其他 React 特性,而不需要寫類組件。 狀態管理: useState 鉤子允許在函數組件中添加狀態。 副作用管理: useEffect 鉤子允許處理副作用,如數據獲取、訂閱和手動 DO
06. React Forms: Dynamically Add New Input Fields On Click || Learn React Through Mini Projects
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
React Props - React 白話文運動。這一篇則會針對 React 語法進一步做講解, 前幾篇也學會了如何建立一個 React 元件,並且學會了元件之間有父子元件的關係。這篇會介紹 React Props 的概念,包含了:React 元件宣告、React Props。