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。
  • 透過內聯樣式,更新畫面上顯示的方塊背景顏色,使其與選取的顏色一致。
留言
avatar-img
留言分享你的想法!
avatar-img
電資鼠 - 您的學習好夥伴
11會員
216內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/06
在 React 中,狀態管理是構建複雜應用的重要一環,其中 useContext 與 Redux 都提供了解決方案,但它們各有優缺點和適用場景。 有鑑於Redux以英文教學為主,網上中文的教學不多,初學者會遇到一些困難,所以本章節希望以一篇文章帶領你快速入門Redux,透過實作的方式上手這個技能!
2025/03/06
在 React 中,狀態管理是構建複雜應用的重要一環,其中 useContext 與 Redux 都提供了解決方案,但它們各有優缺點和適用場景。 有鑑於Redux以英文教學為主,網上中文的教學不多,初學者會遇到一些困難,所以本章節希望以一篇文章帶領你快速入門Redux,透過實作的方式上手這個技能!
2025/03/05
在 React 中,useContext() 是一個 Hook,用來讓你在函式元件中輕鬆地存取 context 資料,避免繁瑣的 props 傳遞。以下是一步步的教學與示例程式碼。 透過本章學習,你將掌握 如何在 React 應用中運用 useContext() 管理全域狀態,提升開發效率!
2025/03/05
在 React 中,useContext() 是一個 Hook,用來讓你在函式元件中輕鬆地存取 context 資料,避免繁瑣的 props 傳遞。以下是一步步的教學與示例程式碼。 透過本章學習,你將掌握 如何在 React 應用中運用 useContext() 管理全域狀態,提升開發效率!
2025/03/05
在本章,我們將使用 React Hooks(useState、useEffect、useRef)來 開發一個碼錶 (Stopwatch) 應用。
2025/03/05
在本章,我們將使用 React Hooks(useState、useEffect、useRef)來 開發一個碼錶 (Stopwatch) 應用。
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
本文介紹了在網站開發中如何運用狀態機的原則和設計方法。通過具體案例分析,以及狀態和數據的區分,詳細介紹了狀態機的設計原則和應用。讀者可以通過本文瞭解如何將狀態機應用於實際的網站開發中。
Thumbnail
本文介紹了在網站開發中如何運用狀態機的原則和設計方法。通過具體案例分析,以及狀態和數據的區分,詳細介紹了狀態機的設計原則和應用。讀者可以通過本文瞭解如何將狀態機應用於實際的網站開發中。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
Storybook 是一個用來透過獨立元件快速開發 UI 介面的工具,以往要開發元件時,我們可能需要建立一個全新的頁面才能進行開發,但這樣的開發方式可能會有一個狀況:沒有辦法事先開發或是預覽流程中不存在的元件。 透過 Storybook 我們在開發元件時,不需要重新建立複雜的頁面結構⋯⋯
Thumbnail
Storybook 是一個用來透過獨立元件快速開發 UI 介面的工具,以往要開發元件時,我們可能需要建立一個全新的頁面才能進行開發,但這樣的開發方式可能會有一個狀況:沒有辦法事先開發或是預覽流程中不存在的元件。 透過 Storybook 我們在開發元件時,不需要重新建立複雜的頁面結構⋯⋯
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
這是一個介紹React Text Wrap Balancer套件的文章,主要內容包括套件的使用方式,常見的實作方式和一些注意事項。文章內容較長,內容大概是在介紹套件的使用方法、使用技巧和注意事項。
Thumbnail
這是一個介紹React Text Wrap Balancer套件的文章,主要內容包括套件的使用方式,常見的實作方式和一些注意事項。文章內容較長,內容大概是在介紹套件的使用方法、使用技巧和注意事項。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News