react-类组件2

news2024/9/20 22:56:47

setState

在开发中不能直接通过修改state的值来使界面发生变化,必须通过setState来修改才能使页面发生变化。
使用setState修改时,两次的修改结果会合并在合并时会比较参数的变化,如果发生变化会覆盖原来的,然后再执行render
在这里插入图片描述

setState的其他用法:

1.setState可以接受一个函数,可以获取之前的state和props

//
this.setState((state,props)=>{
  return data
})
  1. 处理异步调用
//如果希望在数据更新后获取对应的结果可以传入一个回调函数
this.setState({data:"aa"},()=>{
      console.log("更新后的data:",this.state.data)
})

setState的异步更新

在这里插入图片描述

ref

使用ref获取 dom

class App extends Component {
  constructor() {
    super();
    this.state = {};
    this.myRef = createRef();
  }
   cli() {
    console.log(this.myRef);
  }
  render() {
    return (
      <div>
           <span ref={this.myRef}>aaa</span>
            <button onClick={() => this.cli()}>ss</button>
      </div>
    );
  }
}

使用ref获取组件实例

class App extends Component {
  constructor() {
    super();
    this.state = {};
    this.myRef = createRef();
  }
   cli() {
    console.log(this.myRef.current); //可以使用组件内的方法 this.myRef.current.xxx()
  }
  render() {
    return (
      <div>
            <Son ref={this.myRef}></Son>
            <button onClick={() => this.cli()}>ss</button>
      </div>
    );
  }
}

在这里插入图片描述

ref转发
ref不能用于函数式组件,需要使用forwardRef进行转发


export const Son = forwardRef(function (props, ref) {
  return (
    <div>
      <h1 ref={ref}>ss</h1>
      <myContext.Consumer>
        {(value) => {
          return <h1>{value.name}</h1>;
        }}
      </myContext.Consumer>
    </div>
  );
});

双向绑定

change(e){
     this.setState({
     username:e.target.value
  })
}
<input value={username} onChange={(e)=>this.change(e)}>

高阶组件

高阶函数 返回类组件

import { PureComponent } from "react";
function time(Com) {
  return class Time extends PureComponent {
    constructor() {
      super();
    }
    render() {
      const { time } = this.props;
      return (
        <div>
          <div>{Com.name}es6的语法</div>
          <Com time={time}></Com>
        </div>
      );
    }
  };
}
export default time;

在导出时作为参数传入

import { Component, forwardRef } from "react";
import time from "./time";
class Son extends Component {
  render() {
    const { name } = this.context;
    return (
      <div>
        {name}
      
      </div>
    );
  }
}
export default time(Son);

高阶函数 返回函数式组件

export function tests(ELe) {
  return forwardRef(function (props, ref) {
    return (
      <>
        <ELe data={props.data} time={"2023"}></ELe>
      </>
    );
  });
}
import { Component, forwardRef } from "react";
import {tests}from "./time";
class Son extends Component {
  render() {
    const { name } = this.context;
    return (
      <div>
        {name}
      
      </div>
    );
  }
}
export default time(Son);

this.forceUpdate()强制更新

createPortal

将子节点挂载到其他地方

index.html中:
<body>
    <div id="root"></div>
    <div id="portal"> </div>
  </body>
----------------------------------
import React from "react";
import { createPortal } from "react-dom";
class App extends React.Component {
  render() {
    return (
      <div>
        <div>
          <h1>123</h1>
          {createPortal(<h2>456</h2>, document.querySelector("#portal"))}
        </div>
      </div>
    );
  }
}
export default App;

fragment

import React, { Fragment } from "react";
 return (
      <Fragment>
        <div>xxxx</div>
      </Fragment>
    );   
语法糖 
  return (
      <>
        <div>xxxx</div>
      </>
    );

如果需要在Fragment添加key时不能省略
在这里插入图片描述

StrictMode

在这里插入图片描述
严格模式会检查:
在这里插入图片描述

react-transition-group 动画

npm install react-transition-group --save

主要组件

在这里插入图片描述
in 为true时,触发进入状态
in为false时,触发退出状态
在这里插入图片描述
例子:
在这里插入图片描述

<CssTransition  in ={isShow} classNams='why'>

</CssTransition>

在这里插入图片描述

.why-enter{

}
.why-enter-active{

}
.why-exit{

}
.why-exit-active{

}

其他属性
在这里插入图片描述
例子:
在这里插入图片描述
在这里插入图片描述

SwitchTransition

在这里插入图片描述

编写css

css模块化

在这里插入图片描述
例子:
在这里插入图片描述
在这里插入图片描述

css in js

在这里插入图片描述
安装 styled-components:npm i styled-components

基本使用

定义 styled-components

import styled from "styled-components";

export const AppWrapper = styled.div`
  .select {
    color: red;
    .title {
      border: 1px solid black;
      font-size: 20px;
    }
    &:hover {
      background-color: cyan;
    }
  }

  .content {
    background-color: blue;
  }
`;

在组件中使用

import React, { Fragment } from "react";
import { AppWrapper } from "./style";
class App extends React.Component {
  render() {
    return (
      <>
        <AppWrapper>
          <div className="select ">
            xxxx
            <span className="title">span</span>
          </div>
          <div className="content">00000000000</div>
        </AppWrapper>
      </>
    );
  }
}
export default App;

传递变量

在组件中定义变量

import React, { Fragment } from "react";
import { AppWrapper, SelectWrapper } from "./style";
import Fun from "./fun";
class App extends React.Component {
  render() {
    const size = "30";
    return (
      <>
        <AppWrapper>
          <div className="select ">
            xxxx
            <span className="title">span</span>
          </div>
          <div className="content">00000000000</div>
          <SelectWrapper color={"yellow"} size={"30"}>
            <div className="s">sssssss</div>
          </SelectWrapper>
        </AppWrapper>
        <Fun data={"111"}></Fun>
      </>
    );
  }
}
export default App;

使用组件传递的变量

//定义的变量也可以
const myColor='red'
export const SelectWrapper = styled.div`
  .s {
    color: ${(props) => props.color};
    font-size: ${(props) => props.size}px;
  }
  .a {
    color:${myColor}
  }
`;

样式继承
在这里插入图片描述
设置主题
在这里插入图片描述
设置的主题样式可以通过props.theme.来获取
在这里插入图片描述

添加class

可以借助classnames来动态添加class
npm i classnames
在这里插入图片描述

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

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

相关文章

一文读懂什么是GPU算力平台!

随着高性能计算&#xff08;HPC&#xff09;和人工智能&#xff08;AI&#xff09;技术飞速发展&#xff0c;GPU算力平台作为这些技术的重要支撑&#xff0c;正逐步成为各行各业数字化转型的核心驱动力。尚云sunclouds将带您深入了解GPU算力平台的基本概念、工作原理、优势以及…

阿里ChatSDK使用,开箱即用聊天框

介绍&#xff1a; 效果&#xff1a;智能助理 ChatSDK&#xff0c;是在ChatUI的基础上&#xff0c;结合阿里云智能客服的最佳实践&#xff0c;沉淀和总结出来的一个开箱即用的&#xff0c;可快速搭建智能对话机器人的框架。它简单易上手&#xff0c;通过简单的配置就能搭建出对…

【Linux网络】数据链路层【下】{MAC/MTU/ARP/ICMP/NAT/PING/代理服务器原理}

文章目录 1.逐步深入数据链路层1.1MAC帧1.2由集线器到交换机1.3认识MTU 2.ARP 地址解析协议/RARP逆地址解析协议3.DNS(Domain Name System)域名从输入url后到能看到网页 发生了什么【典中典】 4.ICMP协议&#xff1a;一个网络层协议有了TCP&#xff0c;为什么还要用ICMPICMP协议…

关于电脑的硬盘,你知道那些?

硬盘是一种主要用于存储数据的非易失性存储设备。它通过磁性存储技术在旋转的磁盘上读取和写入数据。硬盘通常安装在计算机内部&#xff0c;但也有外置硬盘供外部使用。 磁盘是什么&#xff1f;与硬盘有什么区别&#xff1f; 磁盘是一个更泛化的术语&#xff0c;可以指代任何使…

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录 Day4

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会…

DWG文件发布至IIS后无法下载和预览解决办法

问题描述 DWG文件发布至IIS后无法下载和预览 原因分析&#xff1a; iis里面需要添加扩展 解决方案&#xff1a; 在服务器端IS属性的HTTP头下的MIME内容中添加扩展名“.dwg” MIME类型填入application/acad

分布式锁理解

介绍分布式锁&#xff0c;我觉得从项目的背景入手把 在伙伴匹配系统中&#xff0c;我创建了一个定时任务&#xff0c;做为缓存预热的手段 这个具体原因在Redis-CSDN博客 接下来切入正题&#xff1a; 想象每个服务器都有一个定时任务&#xff0c;都要对数据库或者缓存进行操…

C语言作业5(学生管理系统C语言)

成学生管理系统 1> 使用菜单完成 2> 有学生的信息录入功能&#xff1a;输入学生个数&#xff0c;并将学生的姓名、分数录入 3> 查看学生信息&#xff1a;输出所有学生姓名以及对应的分数 4> 求出学习最好的学生信息&#xff1a;求最大值 5> 按姓名将所有学…

Hyper-V 性能监控工具

虚拟化是任何组织网络管理战略不可或缺的一部分&#xff0c;对于帮助提高网络效率和资源可用性至关重要。采用虚拟基础架构具有多种好处&#xff0c;例如最大限度地减少停机时间、降低运营成本和提高生产力。 在所有虚拟服务器中&#xff0c;Microsoft Hyper-V因其多功能性和可…

亚马逊测评如何实现不同账户拥有独立运行环境,提高成功率

测评之所以被认为是最快速有效的推广方式&#xff0c;是因为它能够迅速影响多个关键因素。通过测评&#xff0c;您能够快速提升关键词的转化率&#xff0c;从而获得更好的搜索排名。优质的评价有助于增加产品的权重和转化率&#xff0c;进一步提升排名。同时&#xff0c;增加的…

在Windows环境下安装pycharm

Python环境搭建 第一步下载安装python 等待安装完成 验证python是否安装成功 Python开发工具安装部署 JetBrains: Essential tools for software developers and teams PyCharm: the Python IDE for data science and web development 下载社区版本的PyCharm 双击打开下载好的…

花几千上万学习Java,真没必要!(一)

1、主流的操作系统&#xff1a; 目前主流的PC端操作系统包括Windows、Mac OS和Linux。其中Windows是由微软公司开发的操作系统&#xff0c;Mac OS是由苹果公司开发的操作系统&#xff0c;而Linux则是开放源代码的操作系统&#xff0c;它有很多的发行版&#xff1a;比如&#xf…

PostgreSQL(二十二)缓冲区管理器

目录 一、缓冲区概述 1、缓冲区结构 2、buffer_tag结构 3、Backend进程读取操作 4、写脏块 二、缓冲区管理器结构 1、第一层&#xff1a;Buffer Table layer&#xff08;缓冲区表层&#xff09; 2、第二层&#xff1a;Buffer Descriptor Layer&#xff08;缓冲区描述层…

Vue2-动画

1.transition过渡 | 用transition CSS做动画 Vue-transition文档&#xff1a;进入/离开 & 列表过渡 — Vue.js [用transition做CSS动画]Enter状态&#xff1a;JS Bin - Collaborative JavaScript Debugging Leave状态&#xff1a;JS Bin - Collaborative JavaScript Debug…

经验分享:征信查询多了会不会影响大数据综合评分?

很多人在申请贷款的时候&#xff0c;会有一个疑问&#xff0c;就是自己的征信没逾期&#xff0c;就是查询偏多一点&#xff0c;但能达到申贷要求&#xff0c;为什么还会被拒贷?其实就是大数据花了的原因&#xff0c;那征信查询多了会不会影响大数据综合评分呢?接下来本文就为…

【C++】继承最全解析(什么是继承?继承有什么用?)

目录 一、前言 二、什么是继承 ? &#x1f4a2;继承的概念&#x1f4a2; &#x1f4a2;继承的定义&#x1f4a2; &#x1f95d;定义格式 &#x1f347;继承权限 三、基类与派生类对象的赋值转换 四、继承的作用域 五、派生类中的默认成员函数 &#x1f4a2…

[leetcode]minimum-cost-to-reach-destination-in-time 规定时间内到达终点的最小费用

. - 力扣&#xff08;LeetCode&#xff09; class Solution { private:// 极大值static constexpr int INFTY INT_MAX / 2;public:int minCost(int maxTime, vector<vector<int>>& edges, vector<int>& passingFees) {int n passingFees.size();ve…

windows节点加入一个Linux集群组成的kubernetes集群

windows节点加入一个Linux集群组成的kubernetes集群 背景描述一.准备环境搭建二.Windows上docker安装三.配置Windows server2019方法一&#xff1a;自动配置安装方法二&#xff1a;手动配置安装失败处理过程 四.Windows的node加入Linux的kubernetes集群五.配置Linux的master 背…

在linux中查找 / 目录下的以.jar结尾的文件(find / -name *.jar)

文章目录 1、查找 / 目录下的以.jar结尾的文件 1、查找 / 目录下的以.jar结尾的文件 [rootiZuf6332h890vozldoxcprZ ~]# find / -name *.jar /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.342.b07-1.el9_0.x86_64/lib/security/policy/limited/US_export_policy.ja…

初学SpringMVC之过滤器解决乱码

写个 login.jsp 页面 提交的 method 一般为 post&#xff08;写 get 不安全&#xff0c;地址栏上会显示&#xff09; action 表示提交后跳转的地址 &#xff08;不直接写控制器里的路径是因为配置 Tomcat 时设置了前缀路径&#xff0c;默认走 http://localhost:8080&#xf…