redux以及react-redux

? ? ? ? ?1.redux案例完整版

????????上一篇文章我們是沒有action文件,直接在countre組件與store以及reducer直接進行狀態的改變以及展示。

? ? ? ? 下面我們加上action文件,我們就不能直接通過dispatch傳,而是通過調用action里面的函數講我們傳入的參數變成action這種對象形式然后dispatch傳遞給store。

????????

? ? ? ? data是我們傳入的參數,返回值是action對象的形式。這里我們一直寫type可能會拼錯,我們也可以定義一個常量文件,去給type重新定義一個常量保存,比如全大寫,這樣保證不會拼錯。

? ? ? ? 這是是引入的store之后,store.dispatch(createIncrementAction(value*1))這種里面是通過action函數變為action格式,然后外面dispatch直接扔到store,然后store調用的reducer開始按照里面的action加工狀態。狀態被改變之后通過store.getState()直接獲取狀態展示到頁面上。

? ? ? ?現在我們正式開始react-redux。

? ?2.react-redux

????????????????

? ? ? ? 這里是react-redux的流程圖,相當于封裝了redux,讓我們更加直觀的用react-redux庫來更好的使用redux。

????????現在我們先實現容器組件和ui組件的連接。

????????

? ? ? ? 先創造容器組件Count在container文件夾,里面引入我們的react-redux庫里面的connect,以及子組件Count,然后連接起來暴露Count組件。我們通過react-redux的connect方法,connect()()第二個括號是我們要連接的ui組件,第一個括號是我們給ui組件傳遞的props。

????????

? ? ? ? 然后我們容器組件在App組件之中引入并且渲染,然后傳入store方法。通過props。

????????這里的子組件只是于容器組件進行傳輸數據,不和redux有任何關系,所以store的一切刪除掉。

????????現在我們完成了連接子組件和容器組件,并且給容器組件傳了store。

? 3.react-redux的基本使用

????????我們通過props在App組件調用Count組件的時候傳了store。

? ? ? ? 現在我們在控制臺看組件的關系。

????????

? ? ? ? Count組件是容器組件Count的子組件。所以props傳遞就說的通了。

????????

? ? ? ? 但是我們在括號里面連接的子組件,我們應該怎么去傳props呢?connect的第一個括號。

????????這里封裝好的方法是connect里面的參數是函數,我們通過函數的返回值來傳,如下圖,注意返回值和props接收的格式都是key:value組合,一共有2個函數參數,第一個返回的是redux保存的狀態,第二個返回的是操作狀態的方法。

????????

? ? ? ? ?這里第一個函數參數是封裝的react-redux自動給我們執行store.getstate()放這里下面的dispatch同理。然后我們在這里設置了狀態以及方法,都是key value的寫法。我們傳props給子組件

???????? 我們在第一個函數返回的參數中返回的是一個對象,值是state,當前我們的state只有一個是數字0,所以直接這樣給count這個key賦值就可以了,第二個函數,是傳遞的方法,比如當我們調用jia的時候,我們傳一個參數value,然后通過createIncrementType生成對應的加的action,然后dispatch發送給store,再給到reducer加工,然后前面的state更新,這樣就實現了整個加的過程。

????????

? ? ? ? 傳了參數就可以直接調用,調用之后會執行dispatch送里面的action到store連接的reducer加工。而且可以簡寫,把第二個函數props當成對象來寫,這樣也會自動識別,react-redux庫會自動識別。

????????

? ? ? ? 這樣很簡潔,雖然可讀性我認為不高。寫成這種對象,keyvalue,只需要寫成action,react-redux就可以幫我們dispatch,也就是react-redux幫我們識別如果是對象就直接dispatch。

????????而且我們用了connect連接redux之后,不需要subscribe監聽狀態的變化。容器組件幫我們監聽使用。也就是說用了react-redux庫就自動幫我們監測狀態變化去刷新頁面。

????????

????????當我們用Count容器組件的時候我們需要傳store,但是每次都需要傳,如果有很多容器組件就很麻煩。這時候我們可以用react-redux的一個provider api。

????????

????????這樣就可以自動給容器組件傳入store。

????????優化文件。這時候文件太多,我們可以直接把count ui組件直接寫到容器組件里面,這樣就可以很方便的去看了,也就是ui組件不需要暴露或者引入,直接寫道容器組件就可以了。

????????

????????

????????就把ui組件以及他的容器組件寫到一起。

?4.react-redux案例實現,數據共享。

????????我們上面的案例,只是走通了流程,我們在reducer里面初始化一個state,然后定義了加工的方法,在action里面定義了傳參數改變成action對象的形式,用react-redux里面的connect幫我們調用store里面的api,store文件定義了一個srore。我們只是實現了操作reducer里面的state并且拿過來使用。我們是直接把初始化的0當作共享的狀態了

????????如果我們現在創建一個新組件person,person組件可以從redux拿到count組件當前的和的值,count組件可以拿到rudex里面存的person組件的關于人的數據

????????首先就需要去創建person組件對應的action以及reducer文件,這里我們需要創建文件夾專門存放action以及reducer。

????????

? ? ? ?

? ? ? ? 這里我們Person對應的reducer和action寫好了。

? ? ? ? 但是現在我們有兩個reducer,那么我們的store就需要改一改了。

????????

? ? ? ? 這里用到的api是固定格式,需要記住。合并2個reducer為一個對象,里面都是函數,這樣rens就是person的reducer,he就是count的reducer,這時候注意thunk,因為我們的store不能接受函數,只能接受一般對象,這里的中間件applyMiddleware(thunk)幫我們執行函數拿到返回值是一個對象,就可以了。

????????

????????

? ? ? ? 然后我們的person文件就可以去connect創造容器組件,以及連接ui組件之后,傳過來我們在reducer初始化設置的數組對象,以及action文件中創建的生成對應type的action的函數,調用傳入我們的對象參數就可以自動變成對應的action了,然后這里我們是簡寫,react-redux庫會自動識別對象然后幫我們dispatch給store連接的reducer上加工,然后更新state。

? ? ? ? 這樣我們的共享狀態流程就通了,只需要用解構賦值通過props調用通過解構拿過來的狀態就可以了,展示出來就行了。

? ? ? ? 流程是這樣的,還是比較繁瑣的,但是代碼并不難,需要去多練習。

????????

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

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

相關文章

idea中配置svn及提交提示“未檢測到更改”提示

首先要安裝TortoiseSVN,選command line client tools; 在idea中,文件->設置->Subversion->如下圖 文件->設置->目錄映射->如下圖 初次導入到svn, 輸入服務器上的svn地址,等待成功即可;…

vue 實現dot-dropdown

<template><div class"app-container"><div class"mt30"></div><el-row :gutter"20"><!-- title --><!-- <div class"modt-box">導航管理</div> --><el-col :span"2&q…

使用 mysql2/promise 模塊返回以后,使用 await 返回數據總結

SELECT 返回結構 const [rows, fields] await db.query(SELECT * FROM folders);返回&#xff1a; rows: 是一個數組&#xff0c;包含所有查到的記錄。fields: 是字段的結構定義&#xff08;列信息&#xff09;&#xff0c;一般不用。 rows 是一個數組&#xff0c;包含所有…

Manus Metagloves pro高精度+無漂移+低延遲 ,重構VR/XR手部交互方式

manus metagloves pro是一款專為動畫制作、虛擬現實及游戲開發打造的高精度無線動作捕捉手套。采用先進的Quantum追蹤技術&#xff0c;實現毫米級動作捕捉&#xff0c;精準還原手指細節&#xff0c;顯著提升創作效率與交互真實感。 MANUS Metagloves Pro解鎖動捕 / 機器人 / XR…

Uniapp插件改造指南:如何讓vue-plugin支持HarmonyOS5原生能力?

一、分層架構設計 采用通用邏輯與平臺實現分離的三層結構&#xff1a; uni-plugin-harmony ├── common # 跨平臺通用層 │ ├── interfaces # 能力接口抽象&#xff08;如Scanner.ets&#xff09; │ └── utils # 工具類 ├── harmony …

P1040 [NOIP 2003 提高組] 加分二叉樹 題解

題目描述 設一個 n n n 個節點的二叉樹 tree \text{tree} tree 的中序遍歷為 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n)&#xff0c;每個節點都有一個分數&#xff08;均為正整數&#xff09;。任一棵子樹 subtree \text{subtree} subtree&#xff08;包含 tr…

【Golang面試題】Data Race 問題怎么檢測?

Go Race Detector 深度指南&#xff1a;原理、用法與實戰技巧 一、什么是數據競爭&#xff1f; 在并發編程中&#xff0c;數據競爭發生在兩個或多個 goroutine 同時訪問同一內存位置&#xff0c;且至少有一個是寫操作時。這種競爭會導致不可預測的行為和極其難以調試的問題。…

257. 二叉樹的所有路徑(js)

257. 二叉樹的所有路徑——DFS 回溯&#xff08;js&#xff09; 題目描述解題思路完整代碼時間復雜度分析 題目描述 257. 二叉樹的所有路徑 解題思路 題意理解 給定一棵二叉樹&#xff0c;要求返回所有從根節點到葉子節點的路徑&#xff0c;路徑以字符串形式表示&#xff0c…

自動化文檔生成工具(親測可運行)

本文介紹了一個用Java編寫的自動化文檔生成工具&#xff0c;通過讀取開發清單文本自動生成格式規范的Word文檔。該工具的主要特點包括&#xff1a; 采用Apache POI庫處理Word文檔&#xff0c;支持多級標題和段落自動生成實現中文數字轉換功能&#xff0c;將編號轉換為"一、…

湖北理元理律師事務所債務優化模型:法律與生活的平衡之道

在債務重組領域&#xff0c;專業機構需同時解決兩個矛盾&#xff1a;法律合規性與債務人可持續生存能力。湖北理元理律師事務所通過“三維干預模型”&#xff0c;在武漢某餐飲連鎖企業債務危機中驗證了該方案的有效性。 一、法律底層設計&#xff1a;還款方案的合法性審查 以該…

Web3-代幣ERC20/ERC721以及合約安全溢出和下溢的研究

Web3-代幣ERC20/ERC721以及合約安全溢出和下溢的研究 以太坊上的代幣 如果你對以太坊的世界有一些了解&#xff0c;你很可能聽人們聊過代幣— ERC20代幣 一個 代幣 在以太坊基本上就是一個遵循一些共同規則的智能合約——即它實現了所有其他代幣合約共享的一組標準函數&…

論文筆記 <交通燈><多智能體>MetaLight:基于價值的元強化學習用于交通信號控制

今天看的論文是這篇MetaLight:基于價值的元強化學習用于交通信號控制 里面提到的創新點就是MetaLight框架&#xff1a;他目標是讓交通信號控制智能體&#xff08;Agent&#xff09;在新路口&#xff08;即使結構或流量模式不同&#xff09;上能??快速學習??&#xff08;Few…

華為OD-2024年E卷-尋找符合要求的最長子串[200分] -- python

問題描述&#xff1a; 給定一個字符串s&#xff0c;找出這樣一個子串: 1)該子串中的任意一個字符最多出現2次; 2)該子串不包含指定某個字符; 請你找出滿足該條件的最長子串的長度。 輸入描述 第一行為要求不包含的指定字符&#xff0c;為單個字符&#xff0c;取值范圍[0-9a-zA…

CppCon 2016 學習:What C++ Programmers Need to Know about Header <random>

隨機數生成的歷史背景 Middle-Square 方法&#xff08;中位平方法&#xff09;&#xff1a; 已知最早的隨機算法之一或由修道士 Brother Edvin 在 1245 年發明由 John von Neumann 在 1949 年重新發現缺點明顯&#xff0c;但執行速度快 Monte Carlo 方法&#xff1a; 起初是…

Origin:誤差棒點線圖繪制

1.首先將你的數據復制到表格 2.選中B(y)列數據&#xff0c;依次點擊圖示選項 3.選中圖中紅框數據&#xff0c;點擊繪制點線圖即可 4.結果展示

Spring 源碼學習 1:ApplicationContext

Spring 源碼學習 1&#xff1a;ApplicationContext Bean 定義和 Bean 實例 AnnotationConfigApplicationContext 首先&#xff0c;創建一個最簡單的 Spring Boot 應用。 在入口類中接收SpringApplication.run的返回值&#xff1a; SpringBootApplication public class Dem…

CppCon 2017 學習:Design Patterns for Low-Level Real-Time Rendering

這段內容講的是離散顯卡&#xff08;Discrete GPU&#xff09;中的內存管理模型&#xff0c;重點是CPU和GPU各自獨立管理自己的物理內存&#xff0c;以及它們如何通過虛擬內存和DMA引擎實現高效通信。以下是詳細的理解和梳理&#xff1a; 1. 基本概念 CPU 和 GPU 是兩個獨立的…

【單調隊列】-----【原理+模版】

單調隊列 一、什么是單調隊列&#xff1f; 單調隊列是一種在滑動窗口或區間查詢中維護候選元素單調性的數據結構&#xff0c;通常用于解決“滑動窗口最大值/最小值”等問題。 核心思想是&#xff1a;利用雙端隊列&#xff08;deque&#xff09;維護當前窗口內或候選范圍內元素…

CSS語法中的選擇器與屬性詳解

CSS:層疊樣式表&#xff0c;Cascading Style Sheets 層疊樣式表 內容和樣式分離解耦&#xff0c;便于修改樣式。 特殊說明&#xff1a; 最后一條聲明可以沒有分號&#xff0c;但是為了以后修改方便&#xff0c;一般也加上分號為了使用樣式更加容易閱讀&#xff0c;可以將每條代…

模擬設計的軟件工程項目

考核題目 論文論述題&#xff1a;結合你 參與開發、調研或模擬設計的軟件工程項目 &#xff0c;撰寫一篇論文 完成以下任務&#xff0c;論文題目為《面向微服務架構的軟件系統設計與建模分析》&#xff0c;總分&#xff1a; 100 分。 1. 考核內容&#xff1a; 一、系統論述…