Redux基礎

簡介

狀態管理工具,集中式管理react、vue、angular等應用中多個組件的狀態,是一個庫,使用之后可以清晰的知道應用里發生了什么以及數據是如何修改,如何更新的

在項目中添加 Redux 并不是必須的,根據項目需求選擇是否引入 Redux

三個原則

1.單一數據源 整個應用的 state 被儲存在一棵 object tree 中,并且這個 object tree 只存在于唯一一個 store 中

2.State 是只讀的 唯一改變 state 的方法就是觸發 action,action 是一個用于描述已發生事件的普通對象。

3.使用純函數來執行修改,為了描述 action 如何改變 state tree ,需要編寫 reducers?

三個要素

1.Action(將要發生的操作)

2.Reducer(根據 action 更新 state,是一個純函數)

????????提供 combineReducers(reducers) 函數組合多個 reducer

3.存放 state 數據的 Store(將 action 和 reducer 聯系到一起的對象)

????????提供 getState() 方法獲取 state?

????????通過 subsctibe(listener) 注冊監聽器?

????????通過 subscribr(listener) 返回的函數注銷監聽器

示例代碼

創建一個簡單的 Redux 應用,使用前先引入 Redux

npm install redux -S

使用Action 創建函數

?Action 創建函數,是一個返回 action 的函數

function increment() {return {type: "INCREMENT"}
}

Reducer

有了Action,還需要?Reducer 來執行更新(reducer 不是一個對象,而是一個返回更新后 state 的純函數)

/**
* counters 就是一個 reducer,根據傳入的 action 的 type 不同,返回一個新的 state 數據
*/
// 先初始化 state
const initCounter = 0;
function counters(state = initCounter, action) {switch(action.type) {case 'INCREMENT':return state ++;default:return state;}
}

創建store?存放 state 數據

通過 reducer 創建 store

const { createStore } = require('redux');const store = createStore(counters);

通過 store.dispatch(action) 將 action 發送給 reducer,更新 state

store.dispatch(increment());

查看結果

// 通過 store.getState() 獲取 State 數據
console.log('counters: ', store.getState());   // => counters: 1

?總結

創建一個操作指令 action -> 創建一個 reducer -> 通過 createStore(reducer) 創建一個 store -> 通過 store。dispatch(action) 執行 reducer 中的更新操作,更新 store 中的數據

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16566.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux部分漏洞處理

1、ICMP timestamp請求響應漏洞 ICMP timestamp請求響應漏洞是指,當網絡設備接收到ICMP timestamp請求時,它會返回當前時間戳作為響應,這可能導致設備的時間戳被暴露,進而可能被用于計算機時間戳協議(TLS)的…

PDF.js

什么是 PDF.js? PDF.js 是由 Mozilla 開發的一個用于呈現 PDF 文件的 JavaScript 庫。它允許開發者將 PDF 文件直接嵌入到網頁中,而無需使用插件或其他外部工具。PDF.js 使用 HTML5 技術,利用 Canvas 元素來呈現 PDF 內容,并提供…

基于集成經驗模態分解的心電信號降噪和基于希爾伯特變換的R峰檢測(MATLAB R2018)

近年來,心臟病已成為危害人類健康最常見的疾病。為了有效預防心臟疾病的發生,往往需要更加準確地采集與診斷心電信號,以便于更好地反映心臟情況。心電信號作為人體生理信號,對于識別心臟異常和心臟疾病具有重要的參考價值。心電信…

ubuntu如何安裝gitlab runner

一、什么是GitLab Runner GitLab Runner 是 GitLab 提供的一個開源工具,用于在構建、測試和部署過程中執行作業。它是 GitLab 持續集成和持續部署(CI/CD)工作流的核心組件之一。 GitLab Runner 有以下主要功能: 作業執行:GitLab Runner 會接收來自 GitLab 的作業請求,并在指定…

ROS基礎學習-ROS通信機制研究

研究ROS通信機制 研究ROS通信機制 0.前言1.話題通信1.1 理論模型1.2 話題通訊的基本操作1.2.1 C++1.2.2 Python0.前言 機器人是一種高度復雜的系統性實現,在機器人上可能集成各種傳感器(雷達、攝像頭、GPS…)以及運動控制實現,為了解耦合,在ROS中每一個功能點都是一個單獨的…

從File類開始,學習Java文件操作

哈嘍,各位小伙伴們,你們好呀,我是喵手。運營社區:C站/掘金/騰訊云;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一…

windows安裝SQL Server

1、下載 下載網頁:SQL Server 下載 | Microsoft 2022版下載地址:https://go.microsoft.com/fwlink/p/?linkid2215158&clcid0x404&culturezh-tw&countrytw 下載結果:SQL2022-SSEI-Dev.exe 打開選第三個,下載介質&…

自定義Linux命令,顯示docker鏡像、容器信息

1、修改環境變量(僅對當前用戶有效) vim ~/.bashrc2、給命令取別名 alias dpsdocker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" alias disdocker images#保存并退出 :wq3、讓配置重新生效 source ~/.bashrc4、測試&…

ChatGPT技術演進簡介

chatGPT(chat generative pre-train transformer, 可以對話的預訓練trasformer模型),討論點: 1、chatGPT為什么突然火了 2、GPT 1.0、2.0、3.0、3.5 、4和4o區別和特性,在不同應用場景中如何選對模型 3、未…

基于ESP8266的無線通信系統設計

本文介紹了一種基于ESP8266的無線通信系統設計方案。ESP8266是一款功能強大且成本低廉的WiFi模塊,非常適合用于構建無線通信系統。本設計主要圍繞ESP8266模塊的功能特點,闡述了系統的硬件組成、軟件設計以及實際應用示例。 關鍵詞:ESP8266&a…

【docker】倉庫harbor的部署

harbor介紹 Harbor 是一個用于存儲和管理 Docker 鏡像的開源倉庫。它提供了一系列的功能,比如用戶管理、訪問控制、鏡像管理、日志審計和安全掃描等。Harbor 可以作為私有倉庫來使用,也可以與公有倉庫(如 Docker Hub)集成使用。 …

python數據分析——apply 1

參考資料:活用pandas庫 apply是指把函數同時作用于DataFrame的每一行或每一列。類似于編寫一些跨每行或每列的for循環,并同時調用apply函數。 1、函數 函數是對python代碼進行分組和復用的一種方法。如果某段代碼會被多次使用,并且使用時是需…

JS Lab

如何用 JavaScript 在瀏覽器中彈窗如何在 JavaScript 中制作鼠標滑過按鈕改變背景顏色如何在 JS 中點擊按鈕使數字增加如何在 JS 中循環打印多少次 HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title…

優化FPGA SelectIO接口VREF生成電路

引言&#xff1a;FPGA設計中使用了各種PCB SelectIO?接口VREF生成電路。有時即使在以前的設計中已經成功的在電路板上設計了VREF生成電路&#xff0c;也會在VREF引腳上發現大量噪聲&#xff08;200–400mV&#xff09;。大量VREF噪聲的存在可能導致高性能SelectIO接口&#xf…

瑞昱半導體AMB82 MINI(RTL8735B)Arduino 方法介紹

介紹瑞昱半導體&#xff08;Realtek &#xff09;AMB82-Mini 物聯網 AI開發板 Ameba是一個易于編程的平臺&#xff0c;用于開發各種物聯網應用程序。AMB82 MINI配備了各種外設接口&#xff0c;包括WiFi、BLE、GPIO INT、I2C、UART、SPI、PWM、ADC。通過這些接口&#xff0c;AM…

找出只出現一次的數字

輸入一些數字&#xff0c;每個數字以逗號分隔&#xff0c;其中有一個數字出現1次&#xff0c;其余數字均會出現2次。請找出那個只出現一次的數字! 提示&#xff1a;使用字典的方式實現 # 輸入一些數字&#xff0c;每個數字以逗號分隔 input_nums input("請輸入一些數字…

從0開始學統計-秩和檢驗

1.什么是秩和檢驗&#xff1f; 秩和檢驗&#xff0c;也稱為Wilcoxon 秩和檢驗&#xff0c;是一種非參數統計檢驗方法&#xff0c;用于比較兩個獨立樣本的中位數是否有顯著差異。它不要求數據滿足正態分布假設&#xff0c;因此適用于小樣本或者數據不滿足正態分布假設的情況。 …

51單片機-實機演示(單個數碼管)

仿真單個數碼管鏈接&#xff1a;http://t.csdnimg.cn/BLMut 一。插線 注意P00連接到A 測試代碼為 #include <reg52.h> //此文件中定義了單片機的一些特殊功能寄存器// sbit KEY2 P3^2; // 獨立按鍵2void main() {P0 0x00;while (1) {}…

Spring AOP實現Mapper層查詢返回重新賦值

需求&#xff1a; 針對查詢返回的數據&#xff0c;在數據庫層處理可能會影響到性能&#xff0c;在考慮性能及維護方便的情況下&#xff0c;采用AOP實現 1&#xff0c;自定義注解 import java.lang.annotation.*;/*** 針對 mapper層返回值 按照一定規則進行特殊處理后返回*/ Ta…

Vue學習JSON.parse()與JSON.stringify()對象與字符串互轉

Vue學習JSON.parse(&#xff09;與JSON.stringify(&#xff09;對象與字符串互轉 一、前言1、代碼 一、前言 JSON.parse() 和 JSON.stringify() 是 JavaScript 中用于處理 JSON 數據的兩個方法。 JSON.parse() 方法將一個 JSON 字符串解析為對應的 JavaScript 對象或數組。例…