redux创建store,处理更新数据

如果我们想使用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: ‘123‘,
    list: [1,2]
};

/**
 * 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;

原文地址:https://www.cnblogs.com/wzndkj/p/10545721.html

时间: 2024-08-01 05:55:56

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

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

视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的.视图并不在数据库中实际存在,行和列数据来自定义视图的查询总使用的表,并且是在使用视图时动态生成的. 视图相对于普通表的优势: 简单:使用视图的用户完全不需要关系后面对应的表结构.关联条件和筛选条件,对用户来说已经是过滤好的符合条件的结果集. 安全:使用视图的用户只能访问他们被允许的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现. 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对

vuex创建store并用computed获取数据

vuex中的store是一个状态管理器,用于分发数据.相当于父组件数据传递给子组件. 1.安装vuex npm i vuex --save 2.在src目录中创建store文件夹,里面创建store.js (1)store.js里引入vue和Vuex, import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) (2)创建并导出store对象 export const store = new Vuex.Store({ }) (3)在st

# 更新数据表以及创建事务

更新数据表以及创建事务 更新数据表 更新数据表使用UPDATE关键字,语法如下: UPDATE 数据表名 SET 需要实现的更改 WHERE 搜索条件; 搜索条件不是必须的,当拥有WHERE关键字是,称为搜索型更新. set后面有两种格式: UPDATE Product SET sale_price = 500, purchase_price = 400 WHERE product_name = 'T恤衫'; 或者 UPDATE Product SET (sale_price, purchase

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

小谈需求: 最近工作上接到一个需求,做一个web展示数据的报表,最好能实时更新,不限制所用技术. 第一个问题:web服务器推送给浏览器新数据,一开始我想到的最快的最简单的方法就是 在web页面上js轮询了.因为我们的数据更新频率并不快. 后来觉得这种办法有点太土了. 或许长轮询更有效.  当然长轮询的技术很多了. java 的dwr,c#的 signalr.c#还可以同过异步请求来自己写长轮询. 遇到的第二个问题,就是数据库如何通知web服务器更新数据,下面便是sql server2008的推送

数据库表的创建、管理和数据操作(实验一),数据库创建

数据库表的创建.管理和数据操作(实验一),数据库创建 今天我们就以实验的形式对表的创建.管理和数据操作进行学习,上课吧. [实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:利用SQL语言进行数据库表的各种操作:1.数据库表的创建.修改和删除操作.2.向表中进行数据的插入.删除和修改操作.[实验内容]1. 利用数据定义语句在实验一创建的stu_DB库中建立学生管理系统的三个表:Student.Course.SC.2.利用INSERT.UPDATE和DELE

8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解

本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to Entities 使用LINQ to Entities操作实体 LINQ操作 懒加载和预加载 插入数据 更新数据 删除数据 本章小结 本人的实验环境是VS 2013 Update 5,windows 10,MSSQL Server 2008. 上一篇<Code First开发系列之领域建模和管理实体关系>,我们主要介绍了EF中“约定大于配置”的概念,如何创建数据

使用 TableAdapter 更新数据集中的两个相关表

在修改并验证了数据集中的数据后,可能需要将更新后的数据发回数据库.要将修改后的数据发送到数据库,需要调用 Update 方法.此适配器的 Update 方法将更新单个数据表并根据该表中每个数据行的rowstate执行正确的命(INSERT.UPDATE 或 DELETE). 在 try/catch 块中调用适配器的 Update 方法. 如果捕获到异常,则找到引发错误的数据行. 协调数据行中的问题(在可能的情况下以编程的方式进行,或者将无效的行显示给用户进行修改),然后重新尝试更新. Try M

更新数据时如何使时间自动更新

更新数据时不能使用time类型 使用timestamp类型才可以自动获取当前系统时间 TIMESTAMP的变体 1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  在创建新记录和修改现有记录的时候都对这个数据列刷新 2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP  在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它 3,TIMESTAMP ON UPDATE CURRE

ThinkPHP 更新数据 save方法

ThinkPHP save() 方法 ThinkPHP 中使用 save() 方法来更新数据库,并且也支持连贯操作的使用. 例子: public function update(){ header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); // 需要更新的数据 $data['email'] = '[email protected]'; // 更新的条件 $condition['userna