如果我们想使用redux,第一步需要通过
yarn add redux
来安装redux
安装成功后就需要去创建一个store,怎么创建呢,非常的简单,在src下面创建一个文件夹,这个文件夹名字就叫做store,里面有个index.js,reducer.js
 
index.js
import { createStore } from 'redux';
// 创建store的时候需要把笔记本传递给store
import reducer from './reducer';
/**
* window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
* 这句话的意思是如果页面上安装了redux devtools这个扩展,那么就在页面上使用这个工具
* 有了这个工具之后,再去做redux的调试就非常方便了
*/
const store = createStore(reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()); export default store;

reducer.js

// 创建笔记本,笔记本里面放了很多图书馆的操作,存储数据情况
/**
* state里面放的就是整个图书馆里面的图书信息,对于redux就是整个存储的数据
* action
* todolist里面创建了action这句话,到那时store并不知到怎么去改变,需要把数据传给笔记本,让笔记本告诉我怎么处理,
* 很好的一件事情,store会自动的去传递这件事情
* 那么这个时候就知道reducer里面这个state是什么,上一次存储的state,action是什么,传递过来的那句鹄
*/
const defaultState = {
inputValue: '',
list: [,]
}; /**
* reducer 可以接收state,但是绝不能修改state,所以返回给store,store去自动替换
* store发生改变,但页面并没有改变,需要在页面上去接收,怎么接收
* 通过 store.subscribe 接收
*/ export default (state = defaultState, action)=> {
if( action.type === 'change_input_value') {
const newState = JSON.parse(JSON.stringify(state));
newState.inputValue = action.value;
return newState; // return给了store
}
if (action.type === 'add_todo_item') {
const newState = JSON.parse(JSON.stringify(state));
newState.list.push(newState.inputValue);
newState.inputValue = '';
return newState;
} console.log(state, action)
return state;
}

todolist

import React, {Component} from 'react';
import { Input, Button, List } from 'antd';
import 'antd/dist/antd.css';
import store from './store/index' class TodoList extends Component{
constructor(props){
super(props);
this.state = store.getState();
this.handleInputChange = this.handleInputChange.bind(this);
this.handleStoreChange = this.handleStoreChange.bind(this);
this.handleBtnClick = this.handleBtnClick.bind(this);
store.subscribe(this.handleStoreChange);
}
render() {
return (
<div style={{margin:'10px'}}>
<Input
placeholder="todo info"
value={this.state.inputValue}
onChange = {this.handleInputChange}
style={{width:'300px', marginRight:'10px'}}
/>
<Button type="primary" onClick={this.handleBtnClick}>提交</Button>
<List
style={{width:'300px', marginTop:'10px'}}
size="small"
bordered
dataSource={this.state.list}
renderItem={item => (<List.Item>{item}</List.Item>)}
/>
</div> )
}
handleInputChange(e){
// 去改变store里面的内容,首先要创建一句话,告诉store
const action = {
type: 'change_input_value',
value: e.target.value
}
// 那么怎么把这句话传给store呢,store里面有个方法叫做dispatch,这个方法就可以把这句话传给store
store.dispatch(action);
}
handleStoreChange() {
/**
* 当我感知到数据发生变化的时候,我去调用store.getState()从store里面重新去取数据
* 然后调用setState替换掉当前组件里面的数据
*/
this.setState(store.getState())
}
handleBtnClick() {
// 首先数据改变了,要去修改store里面的内容,首先要创建一个action
const action = {
type: 'add_todo_item'
}
// action创建好了,要传递过去,store会自动转发给reducer
store.dispatch(action);
}
} export default TodoList;

redux创建store,处理更新数据的更多相关文章

  1. SQL Server通过创建临时表遍历更新数据

    前言: 前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据.(线上数据库用是SQL Server20 ...

  2. 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)

    常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...

  3. vuex创建store并用computed获取数据

    vuex中的store是一个状态管理器,用于分发数据.相当于父组件数据传递给子组件. 1.安装vuex npm i vuex --save 2.在src目录中创建store文件夹,里面创建store. ...

  4. MySQL视图-(视图创建,修改,删除,查看,更新数据)

    视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的.视图并不在数据库中实际存在,行和列数据来自定义视图的查询总使用的表,并且是在使用视图时动态生成的. 视图相对于普通表的优势: 简单:使用视 ...

  5. 使用FusionCharts创建可更新数据的JavaScript图表

    先创建一个简单的图表,然后改变它的数据(请参见下面的代码).图表最初据显示8月份的销售数据,当用户点击按钮时改为显示9月份的销售数据.每个月都有单独的XML文件,代码如下: <html> ...

  6. 【212】HDF更新数据&HDF创建

    HDF更新数据:对原有HDF数据进行数据更新,不破坏HDF的数据结构 pro add_data_sst ;实现将SST增加1度,再将结果更新到SST中 ;1. 获取SST索引 ;2. 通过索引获取ID ...

  7. 【React】Redux入门 & store体验

    组件间传值联动是令人头疼的问题,尤其是一个组件影响多个其他组件状态变化的时候,常常需要一级一级与父组件传值,与父组件的兄弟组件传值等等, 如何化繁为简地处理‘牵一发动全身’的清理就是将所有组件的sta ...

  8. EF 更新数据出现 System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: 异常

    EF6更新 数据出现 System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: Store update, insert, or  ...

  9. sql server主动推送客户端更新数据

    小谈需求: 最近工作上接到一个需求,做一个web展示数据的报表,最好能实时更新,不限制所用技术. 第一个问题:web服务器推送给浏览器新数据,一开始我想到的最快的最简单的方法就是 在web页面上js轮 ...

随机推荐

  1. 日志收集之nxlog

    一,软件介绍 nxlog 是用 C 语言写的一个开源日志收集处理软件,它是一个模块化.多线程.高性能的日志管理解决方案,支持多平台.可以处理来自许多不同来源的大量事件日志.支持的日志处理类型包括重写, ...

  2. LeetCode 257.二叉树所有路径(C++)

    给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", ...

  3. Nginx使用的php-fpm的两种进程管理方式及优化

    PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5. ...

  4. 支付宝小程序与微信小程序开发功能和语法糖不同

    最近开始负责公司webapp数据打通支付宝小程序,之前已经打通了微信小程序,现在根据支付宝小程序的开发文档在之前的模板上面做修改. 在修改模板的过程中,总结一下双方功能和语法糖的不同之处. 框架: a ...

  5. BNU 4356 ——A Simple But Difficult Problem——————【快速幂、模运算】

    A Simple But Difficult Problem Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO format: %l ...

  6. Linux防火墙/iptables使用

    iptables是linux下的防火墙组件服务,这两天一直使用,总结一下使用方法: 1.检查iptables是否安装 rpm -qa|grep iptables 如果没有安装该组件,可以通过yum i ...

  7. 2、按钮:Buttons

    /* --- page1.html ---*/ <ion-content padding class="page1"> <h1>基本用法,实体框</h ...

  8. 【学习笔记】HTML基础:列表、表格与媒体元素

    一.列表是信息资源的一种展现形式,它可以使信息结构化和条理化,并以列表的样式显示出来,以便浏览者能够快速的获取相应的信息. 1.无需列表 <ul> <li>第一项</li ...

  9. hdu 2196 叶子节点最长距离(树DP)

    http://www.cnblogs.com/kuangbin/archive/2012/08/28/2659915.html 求每个节点到叶子节点的最长距离 需要保存每个节点到叶子节点距离的最大值和 ...

  10. for循环的几种比较

    对一个集合遍历的3种方法:1.for(int i=0;i<list.size();i++) 2.for(int i=0,len=list.size();i<len;i++) 3.for ( ...