1. createStore(相当于vuex的$store)

这才是数据存储仓库,用来存储初和输出的数据,更vuex$store功能一样

作用:

 创建一个 Redux store 来以存放应用中所有的 state。

 应用中应有且仅有一个 store。

a.store构成

  1. //发送action
  2. store.dispatch(actions)
  3. //获取数据
  4. store.getState()
  5. //订阅,更新数据到视图
  6. store.subscribe(()=>{{})
  7. console.log(store)

b. store例子

  1. createStore import {createStore} from 'redux'
  2. import reducer from './reducer' //第三步 的reducers
  3. const store = createStore(reducer)

c. sate初始化数据

初始化数据state数据,一般设置为null,[],{}等,为reducer完成初始化工作。

  1. const state = {
  2. todos: [
  3. {
  4. id: 1,
  5. title: "周四了"
  6. },{
  7. id: 2,
  8. title: "马上周五了"
  9. }
  10. ]
  11. }

2. reducers (相当于vuex- mutations)

通过reuducer来操作数据

  1. import state from './state'
  2. import * as type from './type'
  3. const reducer = (previousState = state ,action) => {
  4. //new_state是state解构后的值,state值的初始化时不再会影响new_state。
  5. //previousState 初始化数据state,将初始化的值存放在new_state中,不直接修改state中的值
  6. let new_state = {
  7. ...previousState
  8. }
  9. //通过判断不同的reducers名,而vuex则更加简单
  10. switch (action.type) {
  11. case type.ADD_TODO_ITEM:
  12. //这里修改的是新数据
  13. new_state.todos.push({
  14. id: getBiggerId(new_state.todos) + 1, //最大的id+1
  15. title: action.payload
  16. })
  17. break;
  18. default:
  19. break;
  20. }
  21. //返回new_state必不可少
  22. return new_state
  23. }
  24. //动态的获取state数组最大的id值
  25. function getBiggerId(arr){
  26. let new_arr = arr.slice()
  27. if( !arr.length ) return 0
  28. new_arr = new_arr.sort((a,b)=>{
  29. return b.id - a.id //倒叙排,大的在前,小的在后
  30. })
  31. return new_arr[0].id
  32. }

3. action Creators (相当于vuex-actions)

定义方法,发送action 到reducer

  1. import * as type from './type'
  2. import store from './index'
  3. const actionCreators = {
  4. //定义的方法
  5. addTodoItem(payload){
  6. //1. 创建一个动作
  7. let action = {
  8. type: type.ADD_TODO_ITEM,
  9. payload
  10. }
  11. //2. 发送动作给 reducer
  12. //1. Store,dispatch相当于vuex的this.$store 及commit
  13. store.dispatch(action)
  14. }
  15. }
  16. //暴露action
  17. export default actionCreators

4. 视图层

1. 触发action方法

  1. import React, {Component} from 'react'
  2. import actionCreators from './../store/actionCreators';
  3. class TodoInput extends Component{
  4. let value = this.input.value
  5. if( e.keyCode === 13 ){
  6. //触发action中的addTodoItem方法
  7. //通过直接引入actionCreators,(vuex是通过this.$store.dispatch(addTodoItem))
  8. actionCreators.addTodoItem(value)
  9. this.input.value = ""
  10. }
  11. }
  12. }

2. 获取store数据和更新视图

添加一个变化监听器。每当 dispatch action 的时候就会执行,state 树中的一部分可能已经变化。你可以在回调函数里调用 getState() 来拿到当前 state。

  1. import React, {Component} from 'react'
  2. //此时是手动引入定义好的状况,不能全局共享
  3. import store from '../store'
  4. class TodoContent extends Component{
  5. componentWillMount(){
  6. //更新数据到视图
  7. store.subscribe(()=>{
  8. this.setState({
  9. //获取store中的数据
  10. todos: store.getState().todos
  11. })
  12. })
  13. }

Redux简易理解的更多相关文章

  1. React+Redux学习笔记:React+Redux简易开发步骤

    前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...

  2. Sql Jions 的简易理解

    Sql Jions 的简易理解 Select  * from TableA A  left jion TableB  B on  A.key = B.key Select  * from TableA ...

  3. redux的理解

    Redux 这里介绍下我对Redux的理解,不涉及如何使用Redux. Redux 官网介绍: A predictable state container for JavaScript apps.(一 ...

  4. redux深入理解之中间件(middleware)

    理解reduce函数 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. arr.reduce([callback, initi ...

  5. 对于Redux的理解

    在移动端项目,经常会在不同view中进行传递数据,事件.当事件比较少时,我们可以通过常规的事件流方法,注册,发布事件 进行响应等等.但是项目中一个事件多处响应时候,就会使程序变得相当复杂.在现在的Vu ...

  6. react中使用redux简易案例讲解

    为什么我想要使用redux? 前段时间初步上手了react,最近在使用react的过程中发现对于组件之间通信的需求比较迫切,尤其是在axios异步请求后端数据的时候,这样的需求是特别强烈的!举个例子: ...

  7. fish redux 个人理解

    fish redux 理解 fish redux是什么 Fish Redux 是一个基于 Redux 数据管理的组装式 flutter 应用框架, 它特别适用于构建中大型的复杂应用. 它的特点是配置式 ...

  8. JQuery OOP 及 OOP思想的简易理解

    在项目维护的时候,看到通篇的function实际上是非常费(痛)劲(苦),个人对于前端也不是特别熟悉,就想着JQuery能否也建立OOP的写法? 目的便于日后代码维护管理,就算不为了自己,日后交接后也 ...

  9. Redux学习笔记:Redux简易开发步骤

    该文章不介绍Redux基础,也不解释各种乱乱的概念,网上一搜一大堆.只讲使用Redux开发一个功能的步骤,希望可以类我的小白们,拜托它众多概念的毒害,大牛请绕道! 本文实例源代码参考:React-Re ...

随机推荐

  1. CIKM 2013 Paper Modeling interaction features for debate side clustering

    中文简单介绍:本文对怎样对网上论坛讨论中用户交互关系进行统计建模分析进行了研究. 论文出处:CIKM'13. 英文摘要: Online discussion forums are popular so ...

  2. JSP编程技术5-购物车的实现-session会话对象

    首先十分感谢大家对我的文章的支持,我是个刚刚才找到自己方向的在校大学生,当然我的知识和能力有限,眼下正在努力恶补学习中.当我看到自己首次发表到CSDN首页的文章才几个小时阅读量就超过了100时,对我来 ...

  3. mediawiki使用笔记

    https://www.cnblogs.com/ToDoToTry/p/4475067.html

  4. javaScript 预编译过程浅尝

    javaScript 预编译过程 1.创建AO对象(Activation Object) AO{ a: } 2.找形参和变量声明,将变量和形参作为AO属性名,值为undefined AO{ a:und ...

  5. JAVA数组的基本方法

    数组的基本方法 数组可以存放多个数据,多个数据类型要统一数组格式: 格式一:常用写法 数组类型[] 数组名称 = new 数据类型[数组长度]; 格式二:蛋疼写法 数组类型[] 数组名称; 数组名称 ...

  6. 与TCP/IP协议的初次见面(一)

    与TCP/IP协议的初次见面(一) 前言 今下午刚才女朋友那边回来,唉,算是情人节去找她吧,穷屌丝住不起好酒店,住的打折酒店,只是女朋友来姨妈了,万幸啊,牙还疼得不行,这几天光照应她了,没空写博客了. ...

  7. 一入python深似海--对象的属性

    Python中一切皆是对象,每一个对象都能够有多个属性.Python是怎样管理这些属性呢?我们来探讨一下. 属性的__dict__系统 对象的属性包括两部分:类属性和对象属性.对象的属性可能来自于其类 ...

  8. LinkedIn Cubert 实践指南

    · LinkedIn Cubert安装指南 · Understanding Cubert Concepts(一)Partitioned Blocks · Understanding Cubert Co ...

  9. select选择框实现跳转

    select选择框实现跳转 零.启示 1.启示把bom里面的几个对象稍微有点印象,那么主干有了,学其它的就感觉添置加瓦,很简单 就是关注树木的主干 2.万能的百度,不过当然要你基础好学得多才能看得懂, ...

  10. elasticsearch index 之 engine

    elasticsearch对于索引中的数据操作如读写get等接口都封装在engine中,同时engine还封装了索引的读写控制,如流量.错误处理等.engine是离lucene最近的一部分. engi ...