首页 > 其他分享 >简述react、redux、react-redux、redux-saga、dva之间的关系

简述react、redux、react-redux、redux-saga、dva之间的关系

时间:2023-02-27 17:57:56浏览次数:32  
标签:saga State react action state 组件 redux

【react】

  1. 定位:React 是一个用于构建用户界面的JavaScript库。

  1. 特点:它采用声明范式来描述应用,建立虚拟dom,支持JSX语法,通过react构建组件,能够很好的去复用代码;

  1. 缺点:react抽离了dom,使我们构建页面变得简单,但是对于一个大型复杂应用来说,只有dom层的便捷是不够的,如何组织、管理应用的代码,如何在组件件进行有效通信,这些它都没有解决;因此,它还需要一个前端架构才能应对大型应用;

【redux】

  1. 定位:它是将flux和函数式编程思想结合在一起形成的架构;

  1. 思想:视图与状态是一一对应的;所有的状态,都保存在一个对象里面;

  1. API:

    1. store:就是一个数据池,一个应用只有一个;  
    2. state:一个 State 对应一个 View。只要 State 相同,View 就相同。
    3. action:State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。Action 是一个对象。其中的type属性是必须的,表示 Action 的名称。其他属性可以自由设置。
    4. dispatch:它是view发出action的唯一方法;
    5. reducer:view发出action后,state要发生变化,reducer就是改变state的处理层,它接收action和state,通过处理action来返回新的state;
    6. subscribe:监听。监听state,state变化view随之改变;

【react-redux】

  1. 定位:react-redux是为了让redux更好的适用于react而生的一个库,使用这个库,要遵循一些规范;

  1. 主要内容

    1. UI组件:就像一个纯函数,没有state,不做数据处理,只关注view,长什么样子完全取决于接收了什么参数(props)
    2. 容器组件:关注行为派发和数据梳理,把处理好的数据交给UI组件呈现;React-Redux规定,所有的UI组件都由用户提供,容器组件则是由React-Redux自动生成。也就是说,用户负责视觉层,状态管理则是全部交给它。
    3. connect:这个方法可以从UI组件生成容器组件;但容器组件的定位是处理数据、响应行为,因此,需要对UI组件添加额外的东西,即mapStateToProps和mapDispatchToProps,也就是在组件外加了一层state;
    4. mapStateToProps:一个函数, 建立一个从(外部的)state对象到(UI组件的)props对象的映射关系。 它返回了一个拥有键值对的对象;
    5. mapDispatchToProps:用来建立UI组件的参数到store.dispatch方法的映射。 它定义了哪些用户的操作应该当作动作,它可以是一个函数,也可以是一个对象。

       以上,redux的出现已经可以使react建立起一个大型应用,而且能够很好的管理状态、组织代码,但是有个棘手的问题没有很好地解决,那就是异步;    

【redux-saga】:

  1. 定位:react中间件;旨在于更好、更易地解决异步操作(action);redux-saga相当于在Redux原有数据流中多了一层,对Action进行监听,捕获到监听的Action后可以派生一个新的任务对state进行维护;

  1. 特点:通过 Generator 函数来创建,可以用同步的方式写异步的代码;

  1. API:

    1. Effect: 一个简单的对象,这个对象包含了一些给 middleware 解释执行的信息。所有的Effect 都必须被 yield 才会执行。
    2. put:触发某个action,作用和dispatch相同;

【dva】

  1. 定位:dva 首先是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架。dva = React-Router + Redux + Redux-saga;

  1. 核心:

    1. State:一个对象,保存整个应用状态;
    2. View:React 组件构成的视图层;
    3. Action:一个对象,描述事件
    4. connect 方法:一个函数,绑定 State 到 View
    5. dispatch 方法:一个函数,发送 Action 到 State
  1. model:dva 提供 app.model 这个对象,所有的应用逻辑都定义在它上面。

  1. model内容:

    1. namespace:model的命名空间;整个应用的 State,由多个小的 Model 的 State 以 namespace 为 key 合成;
    2. state:该命名空间下的数据池;
    3. effects:副作用处理函数;
    4. reducers:等同于 redux 里的 reducer,接收 action,同步更新 state;
    5. subscriptions:订阅信息;

标签:saga,State,react,action,state,组件,redux
From: https://www.cnblogs.com/chenchuang/p/17160849.html

相关文章

  • React中重用代码的技术
    1.RenderProp具有renderprop的组件接受一个返回React元素的函数,并在组件内部通过调用此函数来实现自己的渲染逻辑,具体来说renderprop是一个用于告知组件需要渲......
  • React Hooks用法大全
    ReactHooks用法大全 前言在React的世界中,有容器组件和UI组件之分,在ReactHooks出现之前,UI组件我们可以使用函数,无状态组件来展示UI,而对于容器组件,函数组件......
  • react封装图片上传组件
    支持表单受控和非受控使用,基于antdupload进行的二次封装,使用场景如下图: 1.组件文件夹  2.index.tsx贴代码importReact,{useEffect,useMemo,useState}f......
  • 滴滴前端高频react面试题汇总
    说说React组件开发中关于作用域的常见问题。在EMAScript5语法规范中,关于作用域的常见问题如下。(1)在map等方法的回调函数中,要绑定作用域this(通过bind方法)。(2)父组件传递......
  • 你要的react+ts最佳实践指南
    本文根据日常开发实践,参考优秀文章、文档,来说说TypeScript是如何较优雅的融入React项目的。温馨提示:日常开发中已全面拥抱函数式组件和ReactHooks,class类组件的写......
  • 腾讯前端必会react面试题合集
    React-Router的路由有几种模式?React-Router支持使用hash(对应HashRouter)和browser(对应BrowserRouter)两种路由规则,react-router-dom提供了BrowserRouter和HashRo......
  • 彻底搞懂React-hook链表构建原理
    写在前面的小结每一个hook函数都有对应的hook对象保存状态信息useContext是唯一一个不需要添加到hook链表的hook函数只有useEffect、useLayoutEffect以及us......
  • 从实现一个React到深度理解React框架核心原理
    前言这篇文章循序渐进地介绍实现以下几个概念,遵循本篇文章基本就能搞懂为啥需要fiber,为啥需要commit和phases、reconciliation阶段等原理。本篇文章又不完全和原文一致,这......
  • 校招前端高频react面试题合集
    了解redux吗?redux是一个应用数据流框架,主要解决了组件之间状态共享问题,原理是集中式管理,主要有三个核心方法:actionstorereduce工作流程view调用store的dispatch......
  • 前端一面常见react面试题(持续更新中)
    React组件中怎么做事件代理?它的原理是什么?React基于VirtualDOM实现了一个SyntheticEvent层(合成事件层),定义的事件处理器会接收到一个合成事件对象的实例,它符合W3C标准,且......