整体思想与结构

文件目录如下:

  • 构建 action,通过创建一个函数,然后返回一个对象,注意需
    要携带 type 属性
  • 构建 reducer,用来响应 action,然后通过 return 把数据传回
    给 store
  • 利用 createStore 来构建 store,构建的时候传递我们写好的
    reducer
  • 利用 store.subscribe() 注册监听
  • 当我们利用store.dispatch()发送一个action的时候就能触发我
    们的监听了,在里面利用 store.getState()就能拿到值

创建一个Action

  • 在根目录下创建一个文件夹action
  • 在该目录下创建一个 index.js 文件,用来 构建Action
const sendAction = () => {...} ;
  • 在 action创建函数里面 利用return,返回一个action对象,注意需要携带type属性
const sendAction = () => {return {type: "aend action",value:"发送了一个action"}}
  • 把这个action创建函数进行导出
module.exports = {sendAction}

整体代码如下

/**
* 这是 action 的构造函数
*/
const sendAction = () => ({
type : 'send_type',
value: '我是一个action'
}) module.exports = {
sendAction
};

创建一个Reducer

  • 在根目录下创建一个文件夹 reducer
  • 在该目录下创建一个 index.js 文件,用来 构建 reducer,注意reducer要接收两个参数
conat rootReducer (state, action) => {...};

• 第一个参数是默认状态,我们可以定义一个初始化的 state,然后进行赋值

const initState = {value:'默认值'}
const rootReducer = (state = initState , action) => {...};
  • 在函数里面判断第二个参数 action的type值是否是我们发送的
  • 如果是的话,我们可以通过 return 返回新的 state
    整体代码如下
/**
* 这个文件是 创建 reducer 函数的,专门用来处理 发送过来的action
*/
const initState = {
value : '默认值'
}
const reducer = (state = initState, action) => {
console.log('我被调用了');
return action['type'] === 'send_type' ? Object.assign({}, state, action) : state;
} module.exports = {
reducer
}

创建Store

  • 在根目录下创建一个文件夹 store
  • 在该目录下创建一个 index.js 文件,用来 构建 store,注意 createStore 函数里面第一个参数接收的是 reducer
import { createStore } from "redux";
const store = createStore(reducer) ;
  • 我们需要导入 刚刚创建的 reducer,然后设置到函数里面去
  • createStore的返回值就是我们构建好的 store,然后进行导出
    整体代码如下
import {createStore} from 'redux';

//导入我们自己创建好的 reducer

import {reducer} from './../reducer';

// 构建 store

const store = createStore(reducer);

export default store;

在App组件开始使用

  • 给页面的button按钮绑定一个点击事件
  • 在组件一加载完毕的时候我们通过 store来进行 监听器的注册,返回值可以用来注销监听
this.unSubbscribe = store.subscribe(() =>{...});
  • 在点击事件处理函数中,通过 store.dispatch来发送一个action
handleClick () => {store.dispatch(sendAction()) };

整体代码如下

import React, { Component } from 'react';
import store from './store';
import {sendAction} from './action'; export default class App extends Component {
handleClick = () => {
const action = sendAction();
store.dispatch(action);
} componentDidMount() {
store.subscribe(() => {
console.log('subscribe', store.getState());
this.setState({})
});
}
render() {
return (
<>
<button onClick={this.handleClick}>点我,发送一个action</button>
<div>{store.getState().value}</div>
</>
)
}
}

redux 的简单实用案例的更多相关文章

  1. hook框架frida的安装以及简单实用案例

    1.下载地址 https://github.co/frida/frida/releases 2.另外两种安装方法 1.Install from prebuilt binaries This is th ...

  2. String 和StringBuffer的简单实用案例

    3.现在有个字符串是按照如下格式保存的:“张三:90|李四:80|王五:100” 显示后的数据如下所示,按不同的人员显示: 姓名:张三,成绩是:90: 姓名:李四,成绩是:90: 姓名:王五,成绩是: ...

  3. jQuery的几种简单实用效果

    许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...

  4. 精选19款华丽的HTML5动画和实用案例

    下面是本人收集的19款超酷HTML5动画和实用案例,觉得不错,分享给大家. 1.HTML5 Canvas火焰喷射动画效果 还记得以前分享过的一款HTML5烟花动画HTML5 Canvas烟花特效,今天 ...

  5. JAVA实用案例之水印开发

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...

  6. JAVA实用案例之图片水印开发

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...

  7. JAVA实用案例之文件导出(JasperReport踩坑实录)

    写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...

  8. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  9. CSS3 linear-gradient线性渐变实现虚线等简单实用图形

    一.作为图片存在的CSS3 gradient渐变 我觉得CSS3 Backgrounds比较厉害的一个地方就是支持多背景,也就是背景图片个数可以无限累加,正好CSS3的gradient渐变性质是bac ...

随机推荐

  1. 利用Qt中的ui文件生成PyQt5程序,自定义槽函数

    1.在Qt Creator4.8.0上面设计如上.ui文件 2.点击上方图标,可以建立信号-槽连接,button_click()为自定义槽函数 3.设计目的:点击clear按钮,可消除上方文本框中的内 ...

  2. Springboot在有锁的情况下如何正确使用事务

    1. 概述 老话说的好:想要赚钱,就去看看有钱人有什么需求,因为有钱人钱多,所以赚的多. 言归正传,在Java项目的研发中,"锁"这个词并不陌生,最经典的使用场景是商品的超卖问题. ...

  3. 理解hashMap

    首先需要理解几个基本概念: 什么是数据结构?(摘自 java数据结构系列--什么是数据结构 (baidu.com)) 数据结构是计算机组织.存储数据的方式.简单来说就是,数据按指定的规则进行存储,从而 ...

  4. 洛谷P7078 [CSP-S2020] 贪吃蛇 题解

    比赛里能做出这题的人真的非常厉害,至少他的智商和蛇一样足够聪明. 首先有一个结论: 当前最强的蛇吃了最弱的蛇之后,如果没有变成最弱的蛇,他一定会选择吃! 证明: 假设当前最强的蛇叫石老板. 如果下一条 ...

  5. 题解 Children Trips

    题目传送门 Description 给出一个大小为 \(n\) 的边权全为 \(1,2\) 的带权树,有 \(q\) 此查询,每次给出 \(u,v,p\) ,问 \(u\to v\) 每次可以最多走边 ...

  6. bzoj4712 洪水(动态dp)

    看起来很模板的一个题啊 qwq 但是我还是wei 题目要求的是一个把根节点和所有叶子断开连接的最小花费. 还是想一个比较\(naive\)的做法 我们令\(dp1[i]\)表示,在\(i\)的子树内, ...

  7. bzoj4094 && luogu3097 最优挤奶

    题目大意: 给定n个点排成一排,每个点有一个点权,有m次修改,每次改变某个点的点权并将最大点独立集计入答案,输出最终的答案 其中\(n\le 40000\ , \ m\le 50000\) QWQ说实 ...

  8. res目录下的结构

    目录 res目录下的结构 drawable开头的文件夹 mipmap开头的文件夹 values开头的文件夹 layout文件夹 使用res目录下的资源 res目录下的结构 如果你展开res目录看一下, ...

  9. FastAPI 学习之路(十三)Cookie 参数,Header参数

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  10. Frida过反调试

    原理介绍:https://www.anquanke.com/post/id/85996 code setImmediate(function () { Java.perform(function () ...