Redux基础

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。

安装: npm install --save redux

安装React绑定库和开发者工具:npm install --save react-redux;npm install --save-dev redux-devtools


Redux 三大原则单一数据源:整个应用的state被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个store 中。State只读:惟一改变 state 的方法就是触发 action,action 是一个用于描述已发生事件的普通对象。使用纯函数来执行修改:通过编写reducers实现,reducer只是一些纯函数,接收state和action,返回新的state。

ActionAction 是把数据从应用(译者注:这里之所以不叫 view 是因为这些数据有可能是服务器响应,用户输入或其它非 view 的数据 )传到 store 的有效载荷。它是 store 数据的唯一来源。一般来说你会通过 store.dispatch() 将 action 传到 store。
1 export const ADD_ITEM = ‘ADD_ITEM‘;
2 export function addItem(text) {
3     return {type: ADD_ITEM, text}
4 }

Reducer

在 Redux 应用中,所有的 state 都被保存在一个单一对象中,Reducer就是用来更新state

import {combineReducers} from ‘redux‘
import {ADD_ITEM, DELETE_ITEM, CHANGE_VALUE,GET_VALUE} from ‘./actions‘

function todos(state = [], action) {
    switch (action.type) {
        case ADD_ITEM:
            return [
                ...state, {
                    text: action.text,
                    completed: false
                }
            ]

        case DELETE_ITEM:
            state.slice(action.index);
            return state;
        default:
            return state
    }
}

Store

Store 就是把它们联系到一起的对象。Store 有以下职责:

再次强调一下 Redux 应用只有一个单一的 store。当需要拆分数据处理逻辑时,你应该使用 reducer 组合 而不是创建多个 store。

const operationApp = combineReducers({todos, value})
export default operationApp;

使用

index.js中

let store = createStore(todoApp)
let rootElement = document.getElementById(‘root‘)
render(
  <Provider store={store}>
    <ToDo />
  </Provider>,
  rootElement
)

Todo.Js中

  const { dispatch,todos,value,store} = this.props;
        return (
            <div>
                <MuiThemeProvider>
                    <Paper style={style} zDepth={3}>
                        <div className="todo-wrap">
                            <div style={divstyle}>
                                <TodoHeader
                                    className="todoHeader"
                                    addTodo={text=>dispatch(addItem(text))}
                                    curValue={value}
                                    valueChange={text=>dispatch(valueChange(text))}/>
                            </div>
                        </div>
                    </Paper>
                </MuiThemeProvider>
            </div>
        );
    }

function select(state) {
  return {
      todos: state.todos,
      value: state.value
  }
}

export default connect(select)(ToDoApp);

以上例子是结合react的简单实现。http://www.redux.org.cn/docs/react-redux/quick-start.html

待续



时间: 2024-08-06 11:20:59

Redux基础的相关文章

redux 基础

什么时候用? 某个组件的状态,需要共享 某个状态需要在任何地方都可以拿到 一个组件需要改变全局状态 一个组件需要改变另一个组件的状态 你用react不能解决的组件通信,redux可以给你解决. redux核心概念 store相当于一个应用的state,但是不可随意更改,必须通过action更改. 强制使用 action 来描述所有变化带来的好处是可以清晰地知道应用中到底发生了什么. 为了把 action 和 state 串起来,开发一些函数,这就是 reducer. reducer 只是一个接收

redux基础概念及执行流程详解

一.执行流程 全局有一个公共的容器(所有组件都可以操作),我们可以在某个组件中把全局容器中的信息进行修改,而只要全局信息修改,就可以通知所有用到该信息的组件重新渲染(类似于发布订阅)==>redux就是这种解决方案:redux只有一个作用,就是为了实现组件之间的信息交互. 1.执行createStore 创建一个容器store来用来管理公用的状态信息 创建一个事件池,用来存储一些方法(方法一般都是用来通知某个组件重新渲染的) 当容器中的状态改变,会自动通知事件池中的方法依次执行 2.基于stor

图解Redux三大核心的关系

本周开始用react开发新项目了,而为了配合react我们选择了Redux框架来管理state.由于之前一直在业余时间学习react和腾讯地图api,无暇顾及学习redux,所以项目刚上手时对redux一无所知,虽然我们领导详细给我们说了这个框架的思路,但是还是听得云里雾里的,没办法啊做过和没做过真的有差好吗……不过硬着头皮一点点写了之后,慢慢就理解了这个框架的思想,其实还是蛮简单的.下面把我理解的redux基础思想画成图表,加深理解.欢迎批评指正. 注:Redux 是 JavaScript 状

Redux生态系统

生态系统 Redux 是一个体小精悍的库,但它相关的内容和 API 都是精挑细选的,足以衍生出丰富的工具集和可扩展的生态系统. 如果需要关于 Redux 所有内容的列表,推荐移步至 Awesome Redux.它包含了示例.样板代码.中间件.工具库,还有很多其它相关内容.要想学习 React 和 Redux ,React/Redux Links 包含了教程和不少有用的资源,Redux Ecosystem Links 则列出了 许多 Redux 相关的库及插件. 本页将只列出由 Redux 维护者

react案例-&gt;新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)

今天分享一个react应用,应在第一篇作品中说要做一个react+redux+xxx的应用.已经做完一部分,拿出来分享.github地址为:点我就可以咯~ 这里实现了一个新闻移动站的spa.本来想写pc端的,但是比较懒,而且因为主要是react的项目,关于css和布局的细节就是糊弄人的了.T.T,这里只说关于这个项目的js部分. 这里的功能很简单,有一下几点: 1,按”心“排序 当比上一个多了,就会排到前面. 2.评论部分 新闻的评论部分类似qq空间的评论 当然,也可以点击新闻回复的哦. ===

React深入 - 手写redux api

简介: 手写实现redux基础api createStore( )和store相关方法 api回顾: createStore(reducer, [preloadedState], enhancer) 创建一个 Redux store 来以存放应用中所有的 state reducer (Function): 接收两个参数,当前的 state 树/要处理的 action,返回新的 state 树 preloadedState: 初始时的 state enhancer (Function): stor

React16+Redux 实战企业级大众点评WebApp

第1章 课程介绍本章主要介绍课程大纲.课程目标,以及开发环境搭建和实战案例演示. 第2章 React项目脚手架:create-react-app本章介绍React生态中最流行的脚手架:Create React App, 包括安装.基本用法.创建Mock数据等. 第3章 React思维方式:跟着Todo项目学习React思想本章以Todo项目为例,从React组件化思想角度出发,详细讲解使用React开发页面的基本流程和基本方法. 第4章 Redux基础:跟着Todo项目学习ReduxRedux是

让微信小程序页面之间的通信不在变得困难

一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序. 有这样一个需求: 首页某个地方要展示购物车商品数量. 当我在其他页面加购了商品,首页数量刷新. 实现方式 方式一:onShow直接请求接口 Page({ onShow() { // ...一些逻辑 // 后端请求新的购物车数量 this.requestCartNum(); } }) 不足: 每次onShow都要请求接口,浪费资源. 方式二:globalData存储购物车数量,

webpack系列--浅析webpack的原理

一.前言 现在随着前端开发的复杂度和规模越来越大,鹰不能抛开工程化来独立开发,比如:react的jsx代码必须编译后才能在浏览器中使用,比如sass和less代码浏览器是不支持的.如果摒弃这些开发框架,开发效率会大幅下降. 在众多前端工程化工具中,webpack脱颖而出成为了当今最流行的前端构建工具. 二.webpack的原理 知其然知其所以然. 1.核心概念 (1)entry:一个可执行模块或者库的入口. (2)chunk:多个文件组成一个代码块.可以将可执行的模块和他所依赖的模块组合成一个c