Redux官网Counter最基本示例的思考

counter-js:计数器API Javascript库 文献资料 计数器API Javascript库 在查看我们的文档。 如何使用 按名称增加 import { CounterAPI } from "counterapi" ; const counter = new CounterAPI ( ) ; counter . up ( "test" ) . then ( ( res ) => { console . log ( res ) } ) 输出 Counter { ID: 1, Name: ' test ' , Count: 15, UpdatedAt: ' 2021-03-27T13:33:51.315934+01:00 ' , CreatedAt: ' 2021-03-26T21:46:18.624369+08:00 ' } 按名称减少 import { CounterAPI } from "counter 立即下载

1.不使用redux实现

如果不使用redux,仅仅依靠react去实现Counter功能是极其简单的。代码如下:
在这里插入图片描述
index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Counter from './components/Counter';

const render = ()=> ReactDOM.render(
    <Counter/>,
    document.getElementById("root")
);

render();

components/Counter.js

import React, {Component} from 'react';

class Counter extends Component {
    constructor(props) {
        super(props);
        this.state = {
            counter: 0
        };
        this.add = this.add.bind(this);
        this.addOdd = this.addOdd.bind(this);
        this.addAsync = this.addAsync.bind(this);
        this.minus = this.minus.bind(this);
    }

    add() {
        this.setState({
            counter: ++this.state.counter
        })
    }

    addOdd() {
        let counter = this.state.counter;
        if (counter % 2 === 1) {
            this.setState({
                counter: ++counter
            })
        }
    }

    addAsync() {
        setTimeout(this.add, 1000);
    }

    minus() {
        this.setState({
            counter: --this.state.counter
        })
    }

    render() {
        return (
            <div>
                Clicked:{this.state.counter} times
                {' '}
                <button onClick={this.add}>+</button>
                {' '}
                <button onClick={this.minus}>-</button>
                {' '}
                <button onClick={this.addOdd}>Increment if odd</button>
                {' '}
                <button onClick={this.addAsync}>Increment async</button>
            </div>
        )
    }
}

export default Counter;

仅仅两个文件就可以实现,Counter功能。那为啥非要引入Redux呢?从自己仅有的这点react经验来看:1.本例中的状态只有counter一个,如果应用足够复杂,在组件内部自己管理状态,而这些状态又会影响其他子组件。为管理这个状态而编写的代码量将会难以阅读和维护,添加新功能也会很麻烦。2.通过用户事件去改变状态,本身没错,但是这些状态没有统一的操作去统一的state数据结构。redux就是想让状态统一管理,统一执行action操作,让 state 的变化变得可预测

2.使用redux

下面是加入redux之后的项目代码:在这里插入图片描述
多了一个reducers/index.js文件。

export default (state =0,action) =>{
    switch (action.type){
        case "INCREASE":
            return state+1;
        case "DECREASE":
            return state-1;
        default:
            return state;
    }
}

src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Counter from './components/Counter';
import {createStore} from 'redux';
import counter from './reducers';

const store = createStore(counter);

const render = ()=> ReactDOM.render(
    /*返回应用当前的 state 树,它与 store 的最后一个 reducer 返回值相同。*/
    <Counter counter={store.getState()}
        add={()=>store.dispatch({type:'INCREASE'})}
        minus={()=>store.dispatch({type:'DECREASE'})}
    />,
    document.getElementById("root")
);

render();
store.subscribe(render);

components/Counter.js

import React, {Component} from 'react';
import PropTypes from 'prop-types';


class Counter extends Component {
    constructor(props) {
        super(props);
        this.addOdd = this.addOdd.bind(this);
        this.addAsync = this.addAsync.bind(this);
    }


    addOdd() {
        let counter = this.props.counter;
        if (counter % 2 === 1) {
            this.props.add()
        }
    }

    addAsync() {
        setTimeout(this.props.add, 1000);
    }



    render() {
        const { counter, add, minus } = this.props;
        return (
            <div>
                Clicked:{counter} times
                {' '}
                <button onClick={add}>+</button>
                {' '}
                <button onClick={minus}>-</button>
                {' '}
                <button onClick={this.addOdd}>Increment if ODD</button>
                {' '}
                <button onClick={this.addAsync}>Increment async</button>
            </div>
        )
    }
}
//严格定义参数类型
Counter.propTypes = {
    counter: PropTypes.number.isRequired,
    add: PropTypes.func.isRequired,
    minus: PropTypes.func.isRequired
};

export default Counter;

在使用redux之后,Counter,中的状态管理被统一到store中,通过store.dispatch(action)的方法唯一的去修改state内容,具体的:会使用当前 getState() 的结果和传入的 action 以同步方式的调用 store 的 reduce 函数。返回值会被作为下一个 state。从现在开始,这就成为了 getState() 的返回值,同时变化监听器(change listener)会被触发。

Counter-JS:使用JavaScript的简单计数器 反JS 使用JavaScript的简单计数器 立即下载

相关推荐

react-count:实时计数器按钮React组件

React计数 烘焙的实时计数器按钮组件。 查看演示。 用例 这个组件可以在以下情况下有用: 关注/取消关注按钮,显示关注者数量 喜欢/不喜欢按钮,显示喜欢的数量 页面浏览量计数器 当前在线用户的计数器 连接到 Firebase 中任何数字数据的通用只读计数器 安装 如果你使用 webpack 只需安装 react-count 模块 npm install react-count 并在你的 React 应用程序中的任何地方要求它: var Count = require('react-count'); 或者您可以使用其他更具体的组件,例如: var OnlineCount = require('react-count').OnlineCount; var ViewCount = require('react-count').ViewCount; 演示 您可以查看在线

Javascript的复习题

javascript复习

weixin_43884744的博客 450

Counter:JS中的简单计数器

Counter:JS中的简单计数器

JavaScript 进阶小细节-2

1. 构造函数返回属性时,属性的值为? function Car(){ this.mark = "L" return {mark: "M"} } const myCar = new Car() console.log(myCar.mark); // M 返回属性的时候,属性的值等于返回的值,而不是构造函数中设定的值。 2. 修改引入的模块会怎样? // counter.js

weixin_46185369的博客 835

从零到一:EHB-电机复合制动系统的Simulink仿真实战指南

本文详细介绍了EHB-电机复合制动系统在纯电动汽车中的Simulink仿真实战指南。通过系统概述、建模核心模块解析、控制策略开发及典型问题排查,帮助读者掌握从零到一的开发流程。重点讲解了液压子系统建模、电机再生制动模型及整车动力学集成,为开发者提供了一套完整的解决方案。

hh234的博客 1006

手把手教你理解ARM SoC中的PPU:电源管理IP的配置与实战避坑指南

本文深入解析ARM SoC中的PPU(Power Policy Unit)电源管理IP,提供详细的配置指南与实战避坑技巧。从PPU基础架构、寄存器配置到与PCSM的协同工作,全面介绍如何优化电源管理策略,解决常见配置误区,并分享高级调试与性能优化方法,助力工程师提升低功耗SoC设计效率。

weixin_28693447的博客 479

vue-入门篇二

7.vue组件 7.1 什么是组件 组件 (Component)是 Vue.js 最强大的功能之一,组件是一个自定义元素或称为一个模块,包括所需的模板(HTML)、逻辑(JavaScript)和样式(CSS)。 组件化开发的特点: 标准 分治 重用 组合 组件也是有 全局(component) 与 局部(components) 之分。 7.2 组件的注册及其使用 在使用组件时需要注意以下几点: 构造 Vue 实例时传入的各种选项大多数都可以在组件里使用,只有一个例外:data必须是函数

qq_44692248的博客 272

Mac OS X 工具技巧:一文搞定个性化命令行窗口(iTerm2 + zsh + oh-my-zsh 配置Powerline风格)

本不想写这篇文章的,因为在Linux下已经配置过很多次,想着mac应该找篇文章一次就搞定了,结果还是踩坑,看了很多文章,不是某一点没不清楚,就是截图有问题或者命令有问题,官网又难得找等等……花了3个多小时才搞定,所以,还是来总结一篇文章就能够搞定的教程。 为什么要用zsh?用了这么多年的bash,不能说bash不好,不过当我用了zsh后发现,什么叫更好用。 配置过程稍微有点繁琐,但是你看过效果...

mickjoust的技术小屋 1万+

Pinia的使用

pinia的状态管理相比vuex简介太多,也很容易上手。

qq_60602244的博客 2603

深度学习二分类实战:用Python+Keras搞定基因表达数据预测(附完整代码)

本文详细介绍了如何使用Python和Keras构建深度学习模型进行基因表达数据的二分类预测。通过数据预处理、特征选择、神经网络构建及优化策略,特别针对小样本场景提供了调参技巧和模型解释方法。文章还包含完整的代码示例,帮助读者快速掌握深度学习在生物信息学中的应用。

weixin_30642561的博客 245

CTF 命令执行绕过总结

tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示。或:rce-xor-or.php & rce-xor-or.py。# ls -t >shell 将输出输入到shell文件中。异或:rce-xor.php & rce-xor.py。%09(url传递)(cat%09flag.php)sh /flag 2>%261 //报错出文件内容。2、1使用空变量$*和$@,$x,${x}绕过。7、异或无符号(过滤0-9a-zA-Z)more:一页一页的显示档案内容。

jnszstmei的博客 1959

从零开始的Android新项目10 - React Native & Redux

本篇来讲讲 React Native 和 Redux,和其他一上来就啪啪啪丢上来一堆翻译的东西不同,本文会从简单的例子入手,让大家能快速地明白 React Native 是什么,Redux 和常见的 MVC、MVP 等有什么区别,怎么去组织一个 Redux 架构的 React Native 项目。为避免大家还没入门就放弃,下一篇才会从我们项目中的实践出发,讲讲更复杂的应用场景。

马克宅只是个码农 7256

ADI DSP开发环境(CCES)下的程序烧录问题(以ADSP-SC589为例)

在CCES环境下将程序烧录到flash主要有两种方式。首先在对项目编译产生文件的属性设置为Release。 在编译完成后,找到每个CORE单独生成的DXE文件: 文件通常位于项目目录下每个core的Release文件中。安装SC589评估板的驱动(ADSP-SC5xx_EZ-KIT_Lite-Rel2.0.0.exe)后,在安装目录下可以找到SPI FLASH芯片的驱动程序(sc589_w25q128fv_dpia_Core1.dxe): 把文件copy到CCES 的目录下由于SC58x处理器的特殊性

daijingxin的博客 3729

一文快速上手 Redux

一文快速上手 Redux 来自 Redux 官网 上列的基础教程之一,是 egghead.io 上的,视频网址 境内能够打开,笔记在 github 上也有。 这里只节选了部分内容,旨在学完了之后就能直接用 store, action 和 reducer 的功能。 Redux 内容提炼 Redux 只有一个不可变的状态树 action 用来描述 Redux 的状态变化 reducer 去实现 Redux 的状态变化 dispatch 用于触发 action 去调度对应的 reducer 去对状

GoldenaArcher的博客 603

吊打原版YOLOv8!ASF-YOLO多尺度融合+注意力机制实战解析(遥感/医疗/质检均适用)

ASF-YOLO融合YOLOv8的创新目标检测框架摘要 ASF-YOLO是针对小目标检测优化的先进框架,采用三重特征编码器和尺度序列融合技术增强多尺度特征提取能力。核心创新包括: 三重特征编码器(TPE)融合跨层级信息 尺度序列特征融合(SSFF)模块通过3D卷积处理多尺度信息 通道-位置注意力机制(CPAM)聚焦关键特征区域 Zoom_cat模块实现自适应多尺度特征融合 该框架特别适用于医学影像、遥感检测等小目标密集场景,通过动态特征权重调整显著提升检测精度。关键技术实现包含多尺度特征统一、3D卷积序列处

FJN110的博客 527

190、LLC谐振变换器的样机调试实战(问题定位)

这篇实战笔记总结了LLC谐振变换器样机调试中的五大典型问题及解决方案:1)空载炸机源于谐振电容纹波电流能力不足;2)轻载啸叫因控制环路不稳定,需调整突发模式阈值;3)MOSFET过热由死区时间不当导致,需精确优化实现ZVS;4)输出纹波大由PCB布局耦合引起,需优化共模抑制;5)启动过冲需延长软启动时间。作者强调调试需结合示波器、热成像仪等工具,理论计算与实测并重,并详细记录每次参数调整。文章指出LLC调试是不断试错的过程,关键是通过现象分析本质原因。

Jack010169的博客 47

Redux & Redux Toolkit

Redux和RTK的使用

qq_43510558的博客 286

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

redux在TS中的具体实现思路

1.先准备一系列的准备工作,项目个根目录写入app文件夹在里面有两个ts文件,hooks和store,它两个的是为了在ts中使用store,在js中是直接可以使用useDispatch和useSelector。2.store本身就是可以理解为一个仓库,类似于vue的state,在这个里面我们需要注意的是redux的类型,跟着官网弄就行。3.hooks文件是针对js里面的useDispatch和useSelector进行类型推断。前言:针对redux刚开始学习的人员,建议跟随官网慢慢学习。

weixin_44970109的博客 723

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

小白路程之----初学React语法栈之redux与react-redux

Redux 1、核心概念 Redux的主要目的,即集中且可预测的管理数据。集中管理指:将所有需要管理的数据放到一个store中进行管理。可预测指:数据的变化可以预测。为了实现这个功能,Redux将数据的操作全部交给了reducer来管理,而在action中定义数据处理的动作。这样当你的数据处理动作action传过来时,store便已经知道将要对数据进行的处理。在Redux中主要有三个内容,...

weixin_34244102的博客 96

redux-actions用法

redux-actions的产生,是为了简化redux的使用。 createAction ​Methods​ ​createAction​ ​createAction(type)​ ​createAction(type, payloadCreator)​ ​createAction(type, payloadCreator, metaCreator)​ import { createAction } from '

xiao1215fei的专栏 715

React实例 webpack+react+redux+router

链接 https://github.com/qingtonghub/redux-mix   react redux的官网示例 Counter:https://github.com/reduxjs/redux/tree/master/examples/counter Todos:https://github.com/reduxjs/redux/tree/master/examples/to...

u014798510的博客 422

在react项目中使用redux帮助(基础版)

参考文献https://www.redux.org.cn/ 什么是redux: redux是react中的全局状态管理体系,相当于vue中的vuex, 是否需要: 在开始使用前,你必须要明确项目是否真的需要它: 1.项目中是否存在多组件共用一种状态的场景? 2.组件之间的状态是否有关联? 举例:添加购物车,显示和修改用户信息,都可以用redux共享全局状态 怎么使用: (先来熟悉一下以下几个概念) 1.action: action 就是一个JavaScript,当vi...

tomotoCoder的博客 1009

react-typescript的一些简单使用,引入antd、redux,按需加载

react脚手架typescript版本整合redux、antd按需加载的简单使用(如有侵权,请联系我) 1.下载create-react-app cnpm i create-react-app -g //全局下载react脚手架,mac用户加上sudo 2.创建react项目(注意:进入启动测试一下项目是否能正常运行) create-react-app ts-react-study --typ...

mackJun的博客 3606

关于redux的入门简介

关于redux其实官网上已经给了一个详细的例子。      //1.首先我们要定义计算规则 function counter(state = 0, action) { switch (action.type) { case 'INCREMENT': return state + 1 case 'DECREMENT': return state - 1 defau

Amoslb 331

微信小程序里使用 Redux 状态管理

微信小程序里使用 Redux 状态管理 前言 前阵子一直在做小程序开发,采用的是官方给的框架 wepy , 如果还不了解的同学可以去他的官网查阅相关资料学习;不得不说的是,这个框架确相比于传统小程序开发模式确实方便很多,它的语法 Vue 的语法很像,可以实现组件化开发,方面后面代码的调整和维护...但是!!这个框架的坑也不是一点点,开发的时候总会遇到奇奇怪怪的问题,自己去踩吧,这...

diansui2286的博客 299
上一篇: rest接口如何适应jsonp的方案
下一篇: es6 实现拖拽类Drag
Next__One
博客等级 码龄9年 14粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值