
- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優點與缺點
- ReactJS - 架構
- ReactJS - 建立 React 應用
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 驗證
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 的元件生命週期
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - Map
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - 命令列介面命令
- ReactJS - 構建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - Context
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - 片段
- ReactJS - 高階元件
- ReactJS - 與其他庫整合
- ReactJS - 效能最佳化
- ReactJS - Profiler API
- ReactJS - Portals
- ReactJS - 無 ES6 ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - 渲染 Props
- ReactJS - 靜態型別檢查
- ReactJS - Strict Mode
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 走馬燈
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - 狀態管理 API
正如我們之前學到的,React 元件透過元件的 this.state 來維護和暴露其狀態。React 提供了一個單一的 API 來維護元件中的狀態。該 API 是 this.setState()。它接受一個 JavaScript 物件或一個返回 JavaScript 物件的函式。
setState()
用於更新元件的狀態物件。這是透過排程對該元件狀態物件的更新來完成的。因此,當狀態改變時,此元件會透過重新渲染來響應。
setState API 的簽名如下:
this.setState( { ... object ...} );
一個設定/更新名稱的簡單示例如下:
this.setState( { name: 'John' } )
使用函式的 setState()
使用函式的 setState API 的簽名如下:
this.setState( (state, props) => ... function returning JavaScript object ... );
這裡:
state 指的是 React 元件的當前狀態
props 指的是 React 元件的當前屬性。
React 建議使用函式形式的 setState
API,因為它在非同步環境中可以正確工作。除了 lambda 函式,也可以使用普通的 JavaScript 函式。
this.setState( function(state, props) { return ... JavaScript object ... }
示例
一個使用函式更新金額的簡單示例如下:
this.setState( (state, props) => ({ amount: this.state.amount + this.props.additionaAmount })
React 狀態不應透過 this.state
成員變數直接修改,透過成員變數更新狀態不會重新渲染元件。
React 狀態 API 的特殊特性
React 狀態 API 的一個特殊特性是,它將與現有狀態合併,而不是替換狀態。例如,我們可以一次更新一個狀態欄位,而不是更新整個物件。此特性使開發人員能夠輕鬆處理狀態資料。
例如,讓我們假設內部狀態包含學生記錄。
{ name: 'John', age: 16 }
我們可以僅使用 setState
API 更新年齡,它會自動將新物件與現有的學生記錄物件合併。
this.setState( (state, props) => ({ age: 18 });
廣告