1. 程式人生 > >ReactNative之Redux入門(3)- redux入門

ReactNative之Redux入門(3)- redux入門

注:本教程針對於有過React/ReactNative開發經驗的人群。參閱文件和阮一峰老師的網路日誌進行學習。可能在第一節的學習中對Redux的基本概念看完之後都不瞭解。現在呢再寫完Demo後再看一遍,將會恍然大悟。摘抄並簡單介紹Redux的基本概念工作原理。1.storeStore就是儲存資料的地方,可以看做成一個容器。整個應用只有一個Store。Redux提供createStore用來建立Store。2.stateStore儲存的所有資料,每個都是state。Store物件包含所有的資料。如果想要得到摸個時點的資料,就要對store生成快照,就叫做state,當前時刻的state可以通過store.getState()拿到。Redux規定,一個state對應一個View。state變view變,反之亦然。3.ActionState的變化,會導致View的變化。但是,使用者是拿不到state的,使用者只能接觸到View。所以state的變化一定是View導致的。View如何導致state發生變化呢?View通過Action發出通知,將資料送達Store,再由Store改變state,state改變必然會引起View的改變。4.ActionCreator
View通過Action傳送訊息,每傳送一個不同的Action,都要建立一個Action。所以要定義ActionCreator函式。並通過ActionType來判斷。5.store.dispatch()dispatch是View發出Action的唯一方法。dispacth接收一個Action引數,並將它傳送出去。6.reducerStore接收到Action以後,會給出一個新的state,這樣View才能發生變化,這種state的計算過程就叫做reducer。當dispatch傳送來action的時候,會自動觸發reducer的執行,為什麼會自動觸發呢?因為在建立Store時傳入了reducer。reducer是純函式,純函式就是拿到同樣的資料會返回同樣的輸出。由於整個應用只有一個Store所以必然導致reducer跟著龐大,所以就要對reducer進行拆分。拆分方法見Demo。7.store.subscribe
Store 允許使用store.subscribe方法設定監聽函式,一旦 State 發生變化,就自動執行這個函式。import { createStore } from 'redux';const store = createStore(reducer);store.subscribe(listener);顯然,只要把 View 的更新函式(對於 React 專案,就是元件的render方法或setState方法)放入listen,就會實現 View 的自動渲染。store.subscribe方法返回一個函式,呼叫這個函式就可以解除監聽。let unsubscribe = store.subscribe(() => console.log(store.getState()));unsubscribe();工作原理圖解

相關推薦

ReactNativeRedux入門3- redux入門

注:本教程針對於有過React/ReactNative開發經驗的人群。參閱文件和阮一峰老師的網路日誌進行學習。可能在第一節的學習中對Redux的基本概念看完之後都不瞭解。現在呢再寫完Demo後再看一遍,將會恍然大悟。摘抄並簡單介紹Redux的基本概念工作原理。1.storeS

Android自動化測試-從入門入門3Espresso入門

https://segmentfault.com/a/1190000004355178 根據該系列之前的兩篇文章:Hello Testing和Testing APIs,我們已經對Android自動化測試的整體背景有了一些瞭解。還記得第一篇文章裡我提到過的基本思路麼?

Java旅hibernate3——第一個hibernate的樣例

數據庫方言 自由 article 存儲 代理 mit rup 方便 post  在解說樣例之前。我們首先來理解一下hibernate的工作原理。理解原理將會幫助我們更好地理解hibernate和運用hibernate。  1. 原理圖   利用hibe

DWR3.0框架入門3 —— ScriptSession的維護及優化

final comm scrip javax href run com stat creat 1.ScriptSession使用中存在的問題 在上一節實現了服務器的推送功能,但是根據 ScriptSession的生命周期我們可以得出以下幾點的問題:

[知了堂學習筆記]_JS小遊戲打飛機3-飛機之間的互相撞擊,boss的出現,以及控制boss死亡

時間 i++ score console function sss 間隔 app tint 我的小飛機和敵軍小飛機撞擊的效果的實現: 1 /** 2 * 定義我的飛機與敵機碰撞的方法: 3 */ 4 function destoryMyPlane(){ 5

redis入門3redis的配置獲取和修改

配置 daemonize rip require str 無限 文件的操作 idf master 一、Redis 配置 Redis 的配置文件位於 Redis 安裝目錄下,文件名為 redis.conf。 你可以通過 CONFIG 命令查看或設置配置項。 二、使用配置 1、

Linux學習路--Mariadb3基本使用操作【20】---20180123

result run page 提高 進行 組成 varchar alias pan 一、MariaDB程序1、MariaDB的程序組成Client mysql:CLI交互式客戶端程序 mysqldump,mysqladmin...Server mysq

java入門3--函數

自動 print 位數 而是 入門 參數傳遞 中修改 更多 由於 函數和方法 如果我們經常要進行一些相似的處理過程,就可以把這個處理過程封裝為函數。 函數可以被多次重復調用,從而實現代碼重用和隔離的目的。 在面向對象的語言中,函數經常和對象綁定在一起,為區分起見,這時它被稱

SpringBoot 2.0入門3

事物管理 1.Springboot整合事物管理 springboot預設整合事物,只主要在方法上加上@Transactional即可 2.SpringBoot分散式事物管理 使用springboot+jta+atomikos 分散式事物管理 2.1 新增配置檔案資訊 &l

Ros入門3ROS學習中遇到的問題:1.rospack depends1 beginner_tutorials出現錯誤

rospack depends1 beginner_tutorials 出現錯誤 [rospack] Error: the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'、 解決方法如下: 按提示sudo

MySQL學習路43

資料庫的基本操作3 4.刪除資料表 4.1刪除沒有被關聯的表 DROP TABLE可以一次刪除一個或多個沒有被其他表關聯的的資料表。語法格式如下: DROP TABLE [IF EXISITS] 表1,表2,……,表n; 如果要刪除的資料表不存在,則會出現一條錯誤資訊: ERROR 10

深度學習PyTorch實戰3——實戰手寫數字識別

  上一節,我們已經學會了基於PyTorch深度學習框架高效,快捷的搭建一個神經網路,並對模型進行訓練和對引數進行優化的方法,接下來讓我們牛刀小試,基於PyTorch框架使用神經網路來解決一個關於手寫數字識別的計算機視覺問題,評價我們搭建的模型的標準是它是否能準確的對手寫數字圖片進行識別。   

目標檢測模型篇3【DMPNet】

文章目錄 1. 前言 2. 實現 2.1 Roughly recall text with quadrilateral sliding window 2.2 Finely localize text with quadrangle

Sokect簡單入門3TCP協議一

簡單物件傳輸 一、物件例項程式:注意物件要實現序列化藉口 1 import java.io.Serializable; 2 3 /** 4 * 使用者類 5 * */ 6 public class User implements Serializable{ 7 priva

scala筆記-函式入門3

函式的定義與呼叫 在Scala中定義函式時,需要定義函式的函式名、引數、函式體。 我們的第一個函式如下所示: def sayHello(name: String, age: Int) = { if (age > 18) { printf("hi %s, you are

大資料入門3配置hadoop

1、上傳hadoop-2.4.1.tar.gz 2、解壓檔案到指定目錄(目錄:admin/app)    mkdir app    tar -zxvf hadoop-2.4.1.tar.gz -C /app     刪

python機器學習入門3——裝飾器和元類

記住這幾句話: 萬物皆物件 裝飾器(decorator):函式亦物件 元類(meta class):類亦物件 物件意味著可以被賦值給變數,通過變數也能呼叫此物件   兩個簡單的程式: 裝飾器例程:實現對函式func的計時   元類例程: 實

Elastic Job入門3 - 整合Springboot

引入pom檔案      <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifa

前端與移動開發vue-day33

父元件向子元件傳值 元件例項定義方式,注意:一定要使用props屬性來定義父元件傳遞過來的資料 <script> // 建立 Vue 例項,得到 ViewModel var vm = new Vue({ el: '#app', data: {

前端與移動開發vue-day23

Vue 1.x 中 自定義元素指令【已廢棄,瞭解即可】 Vue.elementDirective('red-color', { bind: function () { this.el.style.color = 'red'; } }); 使用方式: &lt;red