React中的状态管理

1. Redux概述

1.1 什么是 Redux

        Redux是一个用于javaScript状态容器,可提供与预测化的状态管理。Redux可以让你构建一致化的运用,运行于不同的环境(客户端、服务器、原生运用),并且易于测试。Redux除了和Redux一起使用外,还支持其它界面库,而且它的体积小精悍(只有2kb)


1.2 redux的设计初衷

        随着JavaScript单页面富运用开发的复杂,JavaScript需要管理更多的state(状态),这些state可能包括服务器响应、缓存数据、本地生成未生成持久化到服务器的数据,也包括UI状态等。管理不断变化的state非常麻烦,如果一个model的变化会引起另一个model变化,那么当vlew变化时,就可能引起对应的model以及另一个model的变化,依次可能引起另一个vlew的变化,所以就会产生数据混乱而Redux就是解决这个问题


1.3 Redux三大核心

        1、单一数据源:

                    整个应用的state被存储在object tree中,并且这个object tree只存在于唯一一个state中

        2、State是只读的:

                唯一改变state的方法就是调用action,action是一个用于描述已发生事件的普通对象。

                这样确保了视图和网络请求都不能直接去修改state,相反,它们只能表达想要修改的意图,因为所有的修改都被集中化处理,并且严格按照一个接一个的顺序执行。

store.diapatch({tyle:'COMPLEFE_TODO', index: 1})

            

        3、使用纯函数来执行修改:  

                 为了描述action如何改变state tree,你需要去编写reducers

                 Reducers只是一些纯函数,它接收先前的state和action,并返回新的state。可以复用、可以控制顺序、传入附加参数。  

                

2.Redux的组成

2.1 State-状态:

        State就是我们传递的数据,那么我们在用React开发项目的时候,大致可以把State分为三类:

           1、DomainDate:可以理解成服务器端的数据,比如:获取用户的信息,商品的列表等等。

           2、UIState:决定当前UI展示的状态,比如:弹框的显示隐藏,受控组件等等。

           3、App State:App级别的状态,比如:当是否请求loading,当前理由信息等可能被多个组件去使用的到的状态。


2.2 Action-事件

        Action是把数据从应用传到state的载体,它是state数据的唯一数据源,一般来说,我们可以通过store.dispatch()将action传递给state。

        Action特点:

            1、Action的本质就是一个JavaScript的普通对象

            2、Action对象内部必须要有一个type属性来表示要执行的动作

            3、多数情况下,这个type会被定义成字符串常量

            4、除了type字段之外,action的结构随意进行定义

            5、而我们在项目中,更多喜欢使用action创建函数(就是创建action的地方)

            6、只是描述了有事情要发生,并没有描述如何去更新state

2.3 Reducer

        Reducer本质就是一个函数,它用来响应发送过来的actions,然后经过处理,把state发送给Store

        注意:在Reducer函数中,需要return返回值,这样Store才能接收到数据,函数会接收两个参数,第一个参数是初始化state,第二个参数是action。


2.3 Store 

        Store就是把action与reducer联系到一起的对象

        主要职责:

                1、维持运用的state。 

                2、提供 getState()方法获取state。         

                3、提供dispatch()方法发送action。 

                4、通过subscribe()来注册监听。 

                 5、通过subscribe()返回值来注销监听。


           

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容