尚硅谷笔记——求和案例纯react版、redux精简版

news2025/4/8 17:49:26

家人们天气冷啦注意保暖呀,不要像我一样因为冷而不想起床学习,冬日里也不能放弃训练

看了两遍尚硅谷的redux课程,把reduc案例代码重新敲了一次为了加深印象还是写个播客把,强烈推荐大家看尚硅谷课太细致啦

redux

是什么?

  1. 是一个专门用于做状态管理的 JS 库(不是 react 插件库)

  2. 他可以用在react angular vue等项目中,但基本与react 配合使用

  3. 作用:集中式管理react 应用中多个组件共享的状态

什么情况下需要使用redux?

  1. 某个组件的状态,需要让其他组件可以随时拿到(共享)

  2. 一个组件需要改变另一个组件的状态(通信)

  3. 总体原则:能不用就不用,如果不用比较吃力才考虑使用 (深层次组件、且多)

redux的三个核心概念

action

  1. 动作的对象

  2. 包含2个属性

    • type:标识属性, 值为字符串, 唯一, 必要属性

    • data:数据属性, 值类型任意, 可选属性

    • 例子:{ type: 'ADD_STUDENT',data:{name: 'tom',age:18} }

reducer

  1. 用于初始化状态、加工状态。

加工时,根据旧的state和action, 产生新的state的*纯函数*

store

  1. 将state、action、reducer联系在一起的对象

  2. 如何得到此对象?

    • import {createStore} from 'redux'

    • import reducer from './reducers'

    • const store = createStore(reducer)

  3. 此对象的功能?

    • getState(): 得到state

    • dispatch(action): 分发action, 触发reducer调用, 产生新的state

    • subscribe(listener): 注册监听, 当产生了新的state时,

纯React版写redux

import React, { Component } from 'react'

export default class Count extends Component {

  state = {count: 0}

  increment  = () => {
    const {count} = this.state
    const {value} = this.selectNumber
    this.setState({count:count+value*1})
  }
  decrement = () => {
    const {count} = this.state
    const {value} = this.selectNumber
    this.setState({count:count-value*1})
  }
  // 奇数再加
  incrementIfOdd = () => {
    const {count} = this.state
    const {value} = this.selectNumber
    if(count % 2 !== 0) {
      this.setState({count:count+value*1})
    }
  }
  // 异步加
  incrementAsync = () => {
    const {count} = this.state
    const {value} = this.selectNumber
    setTimeout(() => {
      this.setState({count:count+value*1})
    } ,500)
  }

  render() {
    return (
      <div>
        <h1>当前求和为:{this.state.count}</h1>
        <select ref={c => this.selectNumber = c}>
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
        </select> &nbsp;
        <button onClick={this.increment}>+</button>  &nbsp;
        <button onClick={this.decrement}>-</button>  &nbsp;
        <button onClick={this.incrementIfOdd}>当前求和奇数再加</button>  &nbsp;
        <button onClick={this.incrementAsync}>异步加</button>  &nbsp;
      </div>
    )
  }
}

在页面上试其他按钮,准确无误后可学习下一章

reducer 精简版

精简版文件包括store、reducer

不包括:action Creater只要有一个对象,其中包含type、data就行,可以自己写action在精简版中可以不用acion文件

创建号文件   src/redux/store.js  和 countReducer.js

大前提:  安装redux 第三方库

在store.js中代码:store相当于饭店中的老板要和后厨交代饭菜如何做,要给顾客交差,所以必须暴露出去

新版本中用 legacy_createStore as createStore 方法创建出store

store中的api学习

  1. getState : 得到状态

  2. subscribe : 订阅redux里状态的更改

  3. dispatch : 告诉redux该加哪些数据

问题与解决

用上this.setState({}) 那么redux就能更新状态还可以重新调用render

redux不是facebook出品,关于重新将状态更新至页面上的话做不到

如何解决?

去自行监测redux的改变并重新调用render,但是直接调用render不起作用,所以用this.setState(),而setState就会引起render变化,就是只要调用render就好,不用在setState中写东西

最后一个一劳永逸的办法

如果出现多个组件都需要didMount 每个组件都要写重复的代码 会造成代码的冗余

只要发生任何变化,整个App都会再次调用render

总结:

总结

  1. 去除Count组件自身的状态

  2. src下创建:

    • -src

      -redux

      -store.js

      -count_reducer.js

  3. store.js:

    • 引入redux中的 createStore函数,创建一个store

    • createStore调用时要传入一个为其服务的reducer

    • 记得保留store对象

  4. count_reducer.js :

    • reducer的本质是一个函数,接收 preState、action 返回加工后的状态

    • reducer有两个作用:初始化状态、加工状态

  5. 在index.js中检测store中状态再改变,一旦发送改变重新渲染<App/>

    备注: redux只负责管理状态,至于状态的改变驱动着页面展示,要靠自己写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

即将到来的2023,国内元宇宙开始“割”企业了?

元宇宙爆火一年后&#xff0c;UTONMOS即将成为全球化全部实现ERC-721协议NFT链上垂直游戏价值生态的系统平台&#xff0c;旨在通过利用自身所拥有的各类头部资源和游戏化打造内容层的融合&#xff0c;建立一个元气满满的元宇宙Web3.0平台。 通过数字藏品技术的应用&#xff0c…

Flask框架

Flask一 前言二 快速使用三 内置配置变量四 配置文件的写法五 路由六 cbv写法6.1 快速使用6.2 cbv加装饰器6.3 as_view的执行流程6.4 as_view的name参数6.5 继承View写cbv七 模板语法7.1 渲染变量7.2 变量的循环7.3 逻辑判断一 前言 Flask是一个基于Python开发并且依赖jinja2模…

Fluent中模型设置和数据的复用

1 背景 在实际工程中&#xff0c;必然存在利用仿真比较各类设计方案优劣的场景。 对于复杂模型&#xff0c;逐个设置各个设计方案的仿真模型并从头开始计算结果&#xff0c;既易错也耗时。因此需要通过模型设置和数据的复用&#xff0c;达到防错和提高工作效率。 2 模型设置复…

基于Docker做MySQL主从搭建与Django的读写分离

目录 基于Docker做MySQL主从搭建 django读写分离 基于Docker做MySQL主从搭建 主从的作用&#xff1a;写数据数据时使用主库&#xff0c;从库只用来读数据&#xff0c;这样做能够减少数据库压力&#xff0c;主从搭建可以一主一从&#xff0c;也可以是一主多从。 mysql主从配…

肝2022世界杯,怒写企业级镜像私仓Docker+Harbor实践

2022-12-09 揭幕2022卡塔尔世界杯4强角逐的第一天&#xff0c;越来越精彩了 同时记录程序猿的成长~ 1.背景 由于期望搭建一个企业级CICD的环境&#xff0c;开始尝试常规的gitlabjenkinsk8sdocker harborspringboot开始练手 其中版本如下&#xff1a; 1.gitlab: GitLab Com…

天权信安catf1ag网络安全联合公开赛---wp

文章目录misc简单隐写十位马WebhistoryCrypto疑惑ezrsapasswdre遗失的物品misc 简单隐写 丢进kali binwalk 分离一下 得到一个加密的压缩包 内含flag.txt 使用jphs无密码得到一个txt 得到password:catf1agcatf1agcatf1ag 解压压缩包得到一串字符串 dbug1bh{KQit_x1o_Z0v_…

threejs官方demo学习(2):相机

webgl_camera 不知道是哪里写的有问题&#xff0c;最终的效果&#xff0c;跟官方案例有比较大的差距。不过可以学到的知识点挺多的。 知识点 CameraHelper 相机辅助对象&#xff0c;用于模拟相机视锥体 // 创建透视相机 cameraPerspective new THREE.PerspectiveCamera(5…

二叉树路径和(c#)

问题描述 给定一个二叉树的根和一个整数值&#xff0c;如果二叉树中有根节点到叶子节点的路径上节点值的和等于给定的整数值&#xff0c;则返回真&#xff0c;否则返回假。 叶子节点:没有孩子的节点。 示例 示例1 Input: root [5,4,8,11,null,13,4,7,2,null,null,null,1], t…

两个List<Integer>在相同的值比较返回值为false的问题解析

写在前面:今天刷LeetCode的时候发现一个测试用例始终过不去&#xff0c;代码出问题处大概表述如下: List<Integer> a new ArrayList<>(); a.add(300); List<Integer> b new ArrayList<>(); b.add(300); if(a.get(0) b.get(0)){ 代码块B } else{ 代…

[生成 pdf 详解]

目录 前言: pom需要的依赖: 测试类: 效果: 生成表格PDF: 其他复杂的格式就去研究那个 如何生成吧 测试类代码: 前言: 摸鱼来的 pom需要的依赖: <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><vers…

【计算机毕业设计】76.垃圾分类系统源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多国有企业的之中&#xff0c;随之就产生了“垃圾分类系统”&#xff0c;这样就让垃圾分类系统更…

web前端大作业:旅游网页主题网站设计——武汉旅游网页设计(11页)HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

AWS CodeCommit SSH公钥配置

在本地计算机上的终端中&#xff0c;运行 ssh-keygen 命令&#xff0c;并按照说明将文件保存到您的配置文件的 .ssh 目录中。 其中windows用户可以使用git bash。 这会生成&#xff1a; codecommit_rsa 文件&#xff0c;该文件为私有密钥文件。 codecommit_rsa.pub 文件&#…

Android 搜索匹配的文字之后显示成红色

先简单看一下效果&#xff1a; 实现的主要代码&#xff1a; /*** * param color 需要提示的演示* param txt 字符串信息* param keyword 搜索的关键字* return*/ private SpannableString matchSearchText(int color, String txt, String keyword) {SpannableString spannableS…

基于springboot vue前后端分离的赛事疫情管理系统源码

开发工具&#xff1a;idea (eclipse) 环境&#xff1a;jdk1.8 mysql5.7&#xff0c; navcat 演示视频&#xff1a; 【java毕业设计】基于springboot vue前后端分离的赛事疫情管理系统源码许多年以前&#xff0c;人们在对数据进行统计和记录时候&#xff0c;使用的是纸和笔&…

抄袭、侵权、刷单,谁在洗地机的风口自乱了阵脚?

文|螳螂观察 作者| 陈淼 又一记法律重锤落下&#xff0c;追觅再次被敲在行业的耻辱柱上。 日前&#xff0c;添可和追觅的专利纠纷案迎来最新进展。根据裁定结果&#xff0c;追觅最终向宁波市中级人民法院作出承诺&#xff0c;于2022年10月30日起停止生产、销售四款涉案产品及…

基于碳库模拟、机器学习方法、生命周期评价法(LCA)、经验模型和过程模型的生态与农田温室气体排放的模拟

当前全球温室气体大幅升高&#xff0c;过去170年CO2浓度上升47%&#xff0c;这种极速变化使得物种和生态系统的适应时间大大缩短&#xff0c;进而造成全球气候变暖、海平面上升、作物产量降低、人类心血管和呼吸道疾病加剧等种种危害。生态与农业是甲烷&#xff08;CH4&#xf…

JMeter 的17种逻辑控制器,你用过哪个?

JMeter提供了17种逻辑控制器&#xff0c;它们各个功能都不尽相同&#xff0c;其作用域只对其子节点的sampler有效&#xff0c;作用是控制采样器的执行顺序。 控制测试计划执行过程中节点的逻辑执行顺序&#xff0c;如&#xff1a;Loop Controller、If Controller等&#xff1b…

2022世界物联网博览会|中国电信5G+AIoT创新科技齐上阵,亮点纷呈看不够

2022年无锡世界物联网博览会 正式拉开序幕 本次中国电信展台 以“智联万物 点亮未来”为主题 于无锡太湖国际博览中心B1-01展台 万里鹏翼&#xff0c;振翅而飞 为数智未来插上硬核翅膀&#xff01; 本次展会中国电信展台围绕“云改数转”、“网信安全”、“红色通信”、“…

SpringBoot+Vue实现前后端分离的校园外卖配送系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…