微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

react redux 初始篇

要说今年市面上最火的前端框架,那肯定就是react啦,但其实说白了,react其实最多只能算是一个view层的框架,因为它轻,用它来实现一些界面是非常快的,而且还很容易上手,

但是,如果前端就只是做一些界面,那就只能沦落为---切图仔,而你的薪资就永远只是个切图仔,

那么问题来了,怎样才能不算是一个单纯的切图仔呢?

答案很简单,就是进阶!!! 那么react的进阶在哪里呢? 就是redux

如果说react算是MVC中的 V,那么redux就是M,C ---model,controller

ok,介绍完了redux的重要性,接下来就是 GET STARTED

redux是由flux演变而来的,但是收到Elm的启发,避开了Flux的复杂性,当然啦,不管你有没有用过这些,问题其实都不大,如果有兴趣的话,也可以去研究一下,

首先来安装

npm install redux --save

大多数情况下,我们都是跟react在一起用的,所以还会用到一些依赖包

npm install --save react-redux
npm install --save-dev redux-devtools

那么redux究竟是个虾米玩意儿呢?

应用中所有的 state 都以一个对象树的形式储存在一个单一的store中。
惟一改变 state 的办法是触发action,一个描述发生什么的对象。
为了描述 action 如何改变 state 树,你需要编写reducers。

这是来自于官方文档的一段介绍,

其实就是把应用中所有的state都存储在一起,然后由action来触发去改变state.

import { createStore } from 'redux';

/**
 * 这是一个 reducer,形式为 (state,action) => state 的纯函数。
 * 描述了 action 如何把 state 转变成下一个 state。
 *
 * state 的形式取决于你,可以是基本类型、数组、对象、
 * 甚至是 Immutable.js 生成的数据结构。惟一的要点是
 * 当 state 变化时需要返回全新的对象,而不是修改传入的参数。
 *
 * 下面例子使用 `switch` 语句和字符串来做判断,但你可以写帮助类(helper)
 * 根据不同的约定(如方法映射)来判断,只要适用你的项目即可。
 */
function counter(state = 0,action) {
  switch (action.type) {
  case 'INCREMENT':
    return state + 1;
  case 'DECREMENT':
    return state - 1;
  default:
    return state;
  }
}

// 创建 Redux store 来存放应用的状态。
// API 是 { subscribe,dispatch,getState }。
let store = createStore(counter);

// 可以手动订阅更新,也可以事件绑定到视图层。
store.subscribe(() =>
  console.log(store.getState())
);

// 改变内部 state 惟一方法dispatch 一个 action。
// action 可以被序列化,用日记记录和储存下来,后期还可以以回放的方式执行
store.dispatch({ type: 'INCREMENT' });
// 1
store.dispatch({ type: 'INCREMENT' });
// 2
store.dispatch({ type: 'DECREMENT' });
// 1

就像这样,上面的内容就是一个很简单的计数器,

代码上就是这么简单,那么我来说一下我的理解

redux把整个app中的state来统一管理,因为它只有一个store和一个根级的reducer函数,就像react只有一个React应用和一个根级的组件,

随着应用的不断壮大,可以吧reducer拆分成多个小的reducers,分别独立管理state树,而不需要再添加store

说了这么多,其实有点就在于整个项目的可维护性,健壮性这些更高了,的确是一个很有意思的东西,哈哈

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...