如果我们想使用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. js动态给textarea赋值

    document.getElementById("new_analysed_news").value=datas.weatherContent;

  2. linux 入门命令总结

    1,tree -d /etc/ 参数表示只显示目录 -f 显示内容的完整 -i 不显示树枝显示完整路径2,mkdir -p 递归创建多级目录 -v 显示创建目录的过程 -m 设置目录的默认权限 mkd ...

  3. (转)Python之文件读写

    Python之文件读写 原文:https://www.cnblogs.com/huilixieqi/p/6494891.html 本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 ...

  4. mac下安装win7虚拟机和导入linux虚拟机

  5. 设置ibus为默认输入法

    /etc/profile  文件中编辑 export INPUT_METHOD="ibus"

  6. TOJ 4119 Split Equally

    描述 Two companies cooperatively develop a project, but they don’t like working with one another. In o ...

  7. Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记

    Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...

  8. 用 Python 构建 web 应用

    用 Python 构建 web 应用 如果说仅仅要用 Python 构建 web 应用,可以将 socket 连接.HTTP 原始请求和响应格式等涉及网络基础的东西交给现成的库来实现,只需要专注于 w ...

  9. MVC中提交表单的4种方式

    一,MVC  HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm ...

  10. vue2.0 饿了么项目学习总结

    最近在GitHub上发现一个基于vue2.0的饿了么项目.本着互联网的分享精神,现在将我自己所理解的,所总结的经验分享给大家.本篇文字我将从学习的角度向大家分享. 在学习本项目之前我已经将vue2.0 ...