react-类组件2
创始人
2025-01-09 12:33:08
0

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 (       
this.myRef}>aaa
); } }

使用ref获取组件实例

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

在这里插入图片描述

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

 export const Son = forwardRef(function (props, ref) {   return (     

ref}>ss

{(value) => { return

{value.name}

; }}
); });

双向绑定

change(e){      this.setState({      username:e.target.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 (         
{Com.name}es6的语法
time}>
); } }; } export default time;

在导出时作为参数传入

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

高阶函数 返回函数式组件

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

this.forceUpdate()强制更新

createPortal

将子节点挂载到其他地方

index.html中:      
---------------------------------- import React from "react"; import { createPortal } from "react-dom"; class App extends React.Component { render() { return (

123

{createPortal(

456

, document.querySelector("#portal"))}
); } } export default App;

fragment

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

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

StrictMode

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

react-transition-group 动画

npm install react-transition-group --save

主要组件

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

isShow} classNams='why'>    

在这里插入图片描述

.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 (       <>                    
xxxx span
00000000000
); } } 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 (       <>                    
xxxx span
00000000000
"yellow"} size={"30"}>
sssssss
"111"}> ); } } 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
在这里插入图片描述

相关内容

热门资讯

7分钟了解!开心泉州小程序有挂... 7分钟了解!开心泉州小程序有挂吗(辅助挂)好像真的有挂(详细辅助辅助教程);运开心泉州小程序有挂吗辅...
8分钟了解!微乐透视辅助功能插... 8分钟了解!微乐透视辅助功能插件下载(辅助挂)一贯是真的有挂(详细辅助软件)是由北京得微乐透视辅助功...
分享实测!wepoker辅助软... 分享实测!wepoker辅助软件价格(辅助挂)往昔真的有挂(详细辅助专业教程);支持2-10人实时对...
黑科技辅助挂“开心赢三张自建房... 黑科技辅助挂“开心赢三张自建房有挂吗”外挂透视辅助器(一直是有挂)开心赢三张自建房有挂吗软件透明挂微...
攻略讲解"约局吧辅助... 攻略讲解"约局吧辅助"约局吧辅助(果然有挂);1、完成约局吧辅助透视辅助安装,帮助玩家取得所有比赛的...
第8分钟辅助器!越乡游辅助软件... 第8分钟辅助器!越乡游辅助软件(辅助挂)果然存在有挂(详细辅助透明挂教程)1、构建自己的越乡游辅助软...
第2分钟了解!九九山城插件(辅... 第2分钟了解!九九山城插件(辅助挂)总是真的有挂(详细辅助插件);九九山城插件软件透明挂更新新赛季,...
发现一款!永胜联盟会封号吗(辅... 发现一款!永胜联盟会封号吗(辅助挂)起初存在有挂(详细辅助技巧教程);小薇(透视辅助)致您一封信;亲...
黑科技辅助挂“多乐跑小程序如何... 黑科技辅助挂“多乐跑小程序如何开辅助”外挂透视辅助脚本(总是是真的有挂)1、起透看视 多乐跑小程序如...
指导大家"台州哈狗有... 指导大家"台州哈狗有辅助软件吗"台州哈狗有辅助软件吗(其实是真的有挂)该软件可以轻松地帮助玩家将台州...