17、react之 reudx
来源:互联网 发布:小区物业管理系统源码 编辑:程序博客网 时间:2024/06/10 10:27
不使用redux:
1、用户操作简单
2、用户之间没有协作
3、不需要与服务器的大量交互
使用redux:
上面三条取反
组件需要共享
一个组件需要改变另一个组建的状态
redux的核心
提供 getState() 方法获取 state;
提供 dispatch(action) 方法更新 state;唯一一个更新state的方法
通过 subscribe(listener) 注册监听器; 监听action、state的变化,一旦state发生变化,就是行这个 listener。一般 react 的项目就是组件的render
或者是setState方法。返回一个函数A,调用A接触监听通过 subscribe(listener) 返回的函数注销监听器。
action:(一个描述发生什么的对象)
通过 state 的状态来改变显示的东西(View)。但是,用户接触不到state,接触的是View。state变化导致View变化。这个Action就是View发出的通知,表示state应该要变化了
action是一个对象,{} ,里面至少有一个属性 type(必须拥有),表示的就是action的名字,其他的属性可以自己设置
{
type:'ADD',
text, ==> text:text
id ==> id:id
}
reducer:(描述 action 如何改变 state 树)
render单独放在一个文件夹里面(reducers)用来改变状态的一个函数
reducer 就是一个纯函数,接收旧的 state 和 action,返回新的 state。(注意: state 的形式取决于你,可以是基本类型、数组、对象、 甚至是 Immutable.js 生成的数据结构。惟一的要点是当 state 变化时需要返回全新的对象,而不是修改传入的参数。)
store收到action以后,给出一个新的state,View发生改变。
案例:计数器(使用 reudx)
1、用户操作简单
2、用户之间没有协作
3、不需要与服务器的大量交互
使用redux:
上面三条取反
组件需要共享
一个组件需要改变另一个组建的状态
redux的核心
store:
看成是一个保存数据的地方,一个容器。(react中的一个数据库) 整个应用 只能有 有一个store
提供的方法:提供 getState() 方法获取 state;
提供 dispatch(action) 方法更新 state;唯一一个更新state的方法
通过 subscribe(listener) 注册监听器; 监听action、state的变化,一旦state发生变化,就是行这个 listener。一般 react 的项目就是组件的render
或者是setState方法。返回一个函数A,调用A接触监听通过 subscribe(listener) 返回的函数注销监听器。
action:(一个描述发生什么的对象)
通过 state 的状态来改变显示的东西(View)。但是,用户接触不到state,接触的是View。state变化导致View变化。这个Action就是View发出的通知,表示state应该要变化了
action是一个对象,{} ,里面至少有一个属性 type(必须拥有),表示的就是action的名字,其他的属性可以自己设置
{
type:'ADD',
text, ==> text:text
id ==> id:id
}
reducer:(描述 action 如何改变 state 树)
render单独放在一个文件夹里面(reducers)用来改变状态的一个函数
reducer 就是一个纯函数,接收旧的 state 和 action,返回新的 state。(注意: state 的形式取决于你,可以是基本类型、数组、对象、 甚至是 Immutable.js 生成的数据结构。惟一的要点是当 state 变化时需要返回全新的对象,而不是修改传入的参数。)
store收到action以后,给出一个新的state,View发生改变。
这种state的计算过程就是reducer
案例:计数器(不使用 reudx)
import React, { Component } from 'react';class Counter extends Component { state = { count: 0 } handleClick=(key)=> { if( key === 'ADD' ){ this.setState({ count: this.state.count + 1 }) return; } this.setState({ count: this.state.count - 1 }) } change(){ if(this.state.count%2 !== 0 ){ this.handleClick('ADD') } } delay(){ var This = this; // setTimeout(this.handleClick('ADD'),1000) setTimeout(function(){ This.handleClick('ADD') },1000) } render() { return ( <div> 点击{this.state.count}次 <button onClick={this.handleClick.bind(this,'ADD')}>+</button> <button onClick={this.handleClick.bind(this,'DEL')}>-</button> <button onClick={this.change.bind(this)}>基变偶</button> <button onClick={this.delay.bind(this)}>延时加一</button> </div> ) }}export default Counter;
案例:计数器(使用 reudx)
详细说明见:http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html
阅读全文
0 0
- 17、react之 reudx
- React中的reudx大规模状态管理
- React 之 react-router
- 18、react之 react-redux
- reactJS之react-route
- react native之helloworld
- React Native之序言
- React之PropTypes
- 初探React之生命周期
- React之JSX入门
- React Native之样式
- React Native之hellWord
- React native 之 tabbarIos
- React 之props属性
- React之生命周期
- React Native之Navigator
- React之组件嵌套
- React之Mixin
- ffmpeg filter过滤器 基础实例及全面解析
- HTML canvas createLinearGradient() 方法
- MySQL-amoeba-读写分离
- python类之间方法互相调用
- 网易云音乐搜索引擎 python+whoosh---(3)界面
- 17、react之 reudx
- 利用IDEA搭建SSH框架时运行tomcat时出现Error listenerStart错误
- 接收RST回应的几种情况
- 组合算法
- 单例模式
- springAOP 实现事务的管理
- Intellij 快捷键
- 求int型正整数在内存中存储时1的个数
- CreateDirectory()用法