【React】React中编写CSS,Redux

news2024/10/5 18:23:40

❤️ Author: 老九
☕️ 个人博客:老九的CSDN博客
🙏 个人名言:不可控之事 乐观面对
😍 系列专栏:

文章目录

  • React中编写CSS
    • 内联样式
    • 普通css
    • css modules
    • css in js
    • 动态添加class
  • Redux
    • JS纯函数
    • 如何创建redux
    • 修改store中的数据
    • 订阅store中的数据
    • actionTypes的抽取
    • actionCreators的抽取
    • react-redux
      • connect原理
    • redux发送异步请求
  • 实现Redux

React中编写CSS

内联样式

  • style接受一个采用小驼峰命名属性的JS对象,而不是CSS字符串,可以动态获取当前state中的状态
  • 缺点:1.写法上面需要使用驼峰2.编写样式没有提示3.大量的样式,代码混乱4.某些样式无法编写(比如伪类、伪元素)
    在这里插入图片描述

普通css

  • 普通css通常会编写到一个单独的文件,之后再进行引入
  • 但是组件化开发中普通的css都属于全局的css,css没有作用域,样式之间会相互影响
    在这里插入图片描述

css modules

  • 需要把样式文件修改成.module形式,css modules解决了局部作用域的问题,但是引用的类名不能使用连接符号-,所有的className必须使用style.className的形式来编写

在这里插入图片描述

在这里插入图片描述

css in js

  • CSS in js是一种模式,其中CSS由js生成的而不是在外部文件中定义;注意此功能不是React的一部分,由第三方库提供
  • 目前比较流行的是styled-components
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 高级用法,可以引入外部变量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

动态添加class

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Redux

JS纯函数

  • 纯函数:确定的输入,一定会产生确定的输出;在函数的执行过程中,不能产生副作用;在React中要求我们无论是函数还是一个class声明的组件,必须要像纯函数一样,保护它们的props不被修改。
  • 由于项目越来越复杂,状态之间互相会存在依赖,一个状态的变化会引起另一个状态的变化,view页面很有可能引起状态的变化,非常难以控制。
  • Redux就是一个帮助我们管理State的容器,Redux是js的状态管理容器。

如何创建redux

在这里插入图片描述
在这里插入图片描述

修改store中的数据

  • 通过store.getState()可以获取store中的数据,通过store.dispatch({
    type:“xxx”
    xxx:xxx
    }),调用这个方法之后,store就会将旧的state和dispatch中的对象一起传给reduer,然后传到reducer中实现更新,reducer返回一个state

在这里插入图片描述

const store = createStore(reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());

在这里插入图片描述
在这里插入图片描述

订阅store中的数据

  • subscribe
    在这里插入图片描述
    在这里插入图片描述

actionTypes的抽取

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

actionCreators的抽取

在这里插入图片描述

react-redux

在这里插入图片描述

  • 通过这个库,可以将我们的react的jsx页面和Redux更方便的联系在一起
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

connect原理

  • 用在类组件中,函数组件直接使用useseletor获取值,usedispatch更新值就可以了
    在这里插入图片描述
    下面是connect源码
    在这里插入图片描述

redux发送异步请求

  • 通过安装redux-thunk,dispatch只能返回一个对象,如果加了redux-thunk中间件,就可以返回函数,从而实现异步请求
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

实现Redux

import { createContext, useContext, useEffect, useState } from "react";
export function createStore(reducer) {
  var state; // 存储应用程序状态的变量
  var action; // 最近一次分发的操作

  state = reducer(state, action); // 使用初始状态和初始操作来初始化状态

  var subscribes = []; // 存储订阅函数的数组

  return {
    getState() {
      return state; // 返回当前的状态
    },

    dispatch(action) {
      state = reducer(state, action); // 使用传入的操作和当前状态来更新状态
      for (var sub of subscribes) {
        sub(); // 通知所有订阅者,状态已更新
      }
      return action; // 返回分发的操作
    },

    subscribe(f) {
      subscribes.push(f); // 将订阅函数添加到订阅数组中
      return () => {
        var idx = subscribes.indexOf(f);
        if (idx >= 0) {
          subscribes.splice(idx, 1); // 取消订阅函数
        }
      };
    },
  };
}

export function connnect() {}

var ReduxContext = createContext();
//创建一个名字,可以在开发工具中的组件树展示出来
ReduxContext.displayName = "ReduxContext";
export function Provider(props) {
  //<Provider store = {store}><App/></Provider>
  var { store, children } = props;
  var [Change, setChange] = useState(0);
  useEffect(() => {
    var unsub = store.subscribe(() => {
      setChange((Change) => Change + 1);
    });
    return unsub;
  }, []);

  return (
    <ReduxContext.Provider value={{ store: store }}>
      {children}
    </ReduxContext.Provider>
  );
}

export function useSelector(selector) {
  var store = useContext(ReduxContext).store;
  var state = store.getState();
  return selector(state);
}

export function useDispatch() {
  var store = useContext(ReduxContext).store;
  return store.dispatch;
}

————————————————————————
♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
版权声明:本文为CSDN博主「亚太地区百大最帅面孔第101名」的原创文章

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

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

相关文章

MVC 模式及对象持久化

MVC 模式及对象持久化 开发框架简介对象关系映射ORM 技术 Struts2 框架的使用Struts2 框架的下载及部署Struts2 配置 开发框架简介 在了解MVC 之前&#xff0c;首先来了解框架的概念。要理解框架的含义得从开发的实际需求说起。在软件开发过程中总有很多基础的功能是相同或者相…

荣耀MagicBook如何重装系统?荣耀MagicBook重装Win10系统教程

荣耀MagicBook如何重装系统&#xff1f;荣耀MagicBook是一款12小时长续航独显轻薄本&#xff0c;深受用户的喜欢&#xff0c;有些用户想知道如何给荣耀MagicBook重装Win10系统&#xff0c;操作难度不会很大&#xff0c;用户们可以根据小编给大家分享的荣耀MagicBook重装Win10系…

【FPGA零基础学习之旅#8】阻塞赋值与非阻塞赋值讲解

&#x1f389;欢迎来到FPGA专栏~阻塞赋值与非阻塞赋值 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家…

Redis从入门到精通【高阶篇】之底层数据结构跳表(SkipList)

文章目录 0.前言1.跳表(SkipList)基本详解2. 源码解析3.总结4.思考题5. Redis从入门到精通系列文章 0.前言 上个篇章回顾&#xff0c;我们上个章节我们学习了《Redis从入门到精通【高阶篇】之底层数据结构整数集(IntSet)详解》&#xff0c;我们从源码层了解整数集由一个头部和…

Day08 Python数据结构(数据容器)详解

文章目录 第五章 Python数据容器5.1. 容器类型介绍5.2. 数据容器运算符5.2.1. 成员运算符5.2.2. 身份运算符 5.3. 字符串str5.3.1. 字符串的定义5.3.2. 运算符的相关操作5.3.3. 索引和切片5.3.3.1. 索引5.3.3.2. 切片 5.3.4. 字符串遍历5.3.5. 字符串的相关操作5.3.5.1. 获取的…

git安装以及git小乌龟使用

一、下载git 打开git官网地址&#xff1a;https://git-scm.com/进行下载 下载完安装&#xff0c;一直next就好&#xff0c;如果愿意就可以改下安装路径&#xff0c;改在d盘。 具体可以参考&#xff1a;git安装教程 二、安装完下载小乌龟以及语言包 下载地址&#xff1a;小乌龟…

【OpenMMLab AI实战营二期笔记】第六天 目标检测和MMDetection

1.什么是目标检测&#xff1f; 目标检测 vs 图像分类 目标检测的应用 &#xff08;1&#xff09;人脸识别 &#xff08;2&#xff09;智慧城市 &#xff08;3&#xff09;自动驾驶 &#xff08;4&#xff09;下游视觉任务&#xff1a;场景文字识别、人体姿态估计 目标检测技术…

微服务 springcloud 08.zuul框架,API网关,整合ribbon和hystrix框架

01.zuul是作为springcloud中的一个网关框架来使用的。 zuul API 网关&#xff0c;为微服务应用提供统一的对外访问接口。 zuul 还提供过滤器&#xff0c;对所有微服务提供统一的请求校验。 在项目中的位置&#xff1a; 02.新建 sp11-zuul 项目 03.pom.xml 需要添加 sp01-com…

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

纺织工厂运营神技,不会你就OUT了!

在纺织工业中&#xff0c;保持适宜的生产环境是至关重要的。温湿度、能耗、设备运行状态以及空气质量等因素对纺织品的质量和生产效率都有着重要影响。 为了实现对生产环境的全面监控和管理&#xff0c;纺织企业越来越多地采用动环监控系统。 客户案例 湖州市某纺织工厂监控项目…

USART2实现Motbus485通信

本文用的单片机是原子的战舰V4 1. 先来驱动一下usart2 USART驱动配置一般步骤: STEP1&#xff1a;使能相关时钟&#xff0c;这块板子usart2用到了A2、A3分别为TX脚、RX脚&#xff0c;D7的作用是发送接收模式控制。下面开启GPIO与USART2时钟&#xff1a; RCC_APB1PeriphClockCm…

SpringBoot中打印 sql 语句

系列文章目录 文章目录 系列文章目录前言一、在配置文件中 application.yml 配置即可二、#Log4g打印SqL语句三、配置Logback总结 前言 在SpringBoot中&#xff0c;我们可以使用日志框架来打印SQL语句&#xff0c;常用的日志框架有Logback和Log4j2。下面以Logback为例&#xff…

35:考虑virtual函数以外的其他选择

假设你正在写一个视频游戏软件&#xff0c;你打算为游戏内的人物设计一个继承体系&#xff0c;剧中人物被伤害或因其他因素而降低健康状态的情况并不罕见。你因此决定提供一个成员函数healthValue&#xff0c;它会返回一个整数&#xff0c;表示人物的健康程度。 由于不同的人物…

Linux x86_64平台同时编译x86_64和arm64两个架构的Qt应用程序出现XRes库无法找到

一 背景 在ubuntu x86_64平台上需要同时编译x86_64和arm64两个架构的Qt应用程序。在实践过程中&#xff0c;发现XRes库只能安装在其中一个平台。 二 根因 安装amd64版本的XRes库会删除arm64版本的库&#xff0c;反之亦然。 在安装amd64版本时&#xff0c;会删除arm64版本&a…

内部员工有没有在线帮助文档可以使用呢

当今企业中&#xff0c;内部员工的工作内容变得越来越复杂&#xff0c;需要不断学习新的知识和技能。在这种情况下&#xff0c;企业需要给员工提供一种便捷的在线帮助文档&#xff0c;使员工能够更加高效地完成工作任务。本文将介绍企业内部员工在线帮助文档的重要性以及如何建…

区块链如何助力价值互联网?这些专家有话说

6月13日&#xff0c;由开放原子开源基金会主办&#xff0c;XuperCore开源项目承办的2023开放原子全球开源峰会区块链分论坛在北京举办。来自区块链领域内的专家、行业代表汇聚一堂&#xff0c;分别以主题演讲、圆桌论坛等形式&#xff0c;阐述了全球区块链行业的新理念、新发展…

Opencv仿射函数getAffineTransform底层实现原理

推导 三角形ABC仿射成为三角形DEF的变换矩阵M 猜测矩阵M [ [a1,b1,c1], [a2,b2,c2] ] 仿射变换的数学联系 对于A点和D点 AX*a1AY*b1c1DX AX*a2AY*b2c1DY 对于B点和E点 BX*a1BY*b1c1EX BX*a2BY*b2c2EY 对于C点和F点 CX*a1CY*b1c1FX CX*a2CY*b2c2FY 求解 对以上数…

seqkit 两种拆分方法的比较

seqkit拆分fastq&#xff0c;fasta等文件有两种方式&#xff1a;split和split2&#xff0c; 二者的逻辑并不一样。 split 是将原文件拆分&#xff0c;写满第一个文件&#xff0c;再写第二个文件 split2是将原文件的内容&#xff0c;挨个写到各个拆分文件里面去&#xff1f; 比…

拓尔微技术干货 | get 5个知识点,了解细分驱动技术

本期我们对步进电机驱动原理、五线的步进电机和四线的步进电机、2-2相励磁和1-2相励磁、步进电机驱动的优化方案、拓尔微TMI8150B细分驱动技术的原理进行详细的介绍&#xff0c;共分为5个知识点&#xff0c;全是技术干货&#xff0c;赶紧get下来~ ✔get 1&#xff1a;步进电机…

datax安装部署使用 windows

Datax在win10中的安装_windows安装datax_JMzz的博客-CSDN博客 DataX/userGuid.md at master alibaba/DataX GitHub 环境准备&#xff1a; 1.JDK(1.8以上&#xff0c;推荐1.8) 2.①Python(推荐Python2.7.X) ②Python(Python3.X.X的可以下载下面的安装包替换) python3.0需…