React - 基础学习

React基础

在这里插入图片描述

React更新视图的流程 是 一层一层查找 到对应的视图做更新

如何生成React工程

//    生成简单的react
npx create-react-app react-app//    生成typescript的react
npx create-react-app react-app-ts --template typescript

React的基本能力

父子组件

//    父组件App
import './App.css';
import FuncCom from './basic/FuncCom';
import ClassCom from './basic/ClassCom';function App() {return (<div className="App"><ClassCom /><FuncCom /></div>);
}export default App;//    子组件ClassCom
import React, { Component } from 'react';export default class ClassCom extends Component {render() {return (<div>ClassCom</div>)}
}//    子组件FuncCom
export default function FuncCom() {return (<div>FuncCom!!</div>)
}

State

state等同于vue中的data state需要用特定的方法进行更新

类组件

必须使用setState方法。
State的值,互相不影响
第二个参数,是一个callback,能拿到state
注意 这里setState是一个异步方法

函数调用在类组件的坑

import React, { Component } from 'react';export default class ClassCom extends Component {constructor(props) {super(props);this.state = {number: 0,message: '1223'}}handleClick() {this.setState({number: this.state.number + 1})}handleClickFn = function() {this.setState({number: this.state.number + 1})}handleFn = () => {this.setState({number: this.state.number + 1})}render() {const { number, message } = this.state;return (<div>ClassCom{ number }{/** 这里如果要调用原型上的方法 那么需要bind this 要不然调用这个函数内会找不到this */}<button onClick={this.handleClick.bind(this)}>{message}</button>{/** 同理 如果是函数时声明的变量也需要bind this */}<button onClick={this.handleClickFn.bind(this)}>{message}</button>{/** 如果调用箭头函数 那么直接写就行了  */}<button onClick={this.handleFn}>{message}</button></div>)}
}

双向绑定

import React, { Component } from 'react';export default class ClassCom extends Component {constructor(props) {super(props);this.state = {number: 0,message: '1223'}}handleChange = (event) => {this.setState({message: event.target.value})}render() {const { number, message } = this.state;return (<div><input value={message} onChange={this.handleChange} /></div>)}
}

函数组件

[state, dispatch] = useState(initState);
//    state: 作为组件的状态,提供给UI渲染视图;
//    dispatch: 用户修改state的方法,同时触发组件更新;
//    参数可以是函数,可以不是,如果是函数,就更新为函数执行的结果,如果不是,直接更新为值。
//    initState:初始值
//    可以是函数可以不是 同dispatch一样import { useState } from "react"export default function FuncCom() {const [ number, setNumber ] = useState(0);const [ message, setMessage ] = useState('哈哈哈');function handleSetNumber(type) {if (type === '+') {setNumber(number + 1)} else {setNumber((v) => v - 1)}}return (<div>FuncCom!!{ number }{ message }<button onClick={() => handleSetNumber('+')}></button><button onClick={() => handleSetNumber('-')}></button></div>)
}

Props 父子组件传值工具

//    父组件App
import './App.css';
import FuncCom from './basic/FuncCom';
import ClassCom from './basic/ClassCom';function App() {return (<div className="App"><ClassCom name="123" count={111} /><FuncComname="123"count={111}slotxx={(<div>6666</div>)}/></div>);
}export default App;//    子组件ClassCom
import React, { Component } from 'react';export default class ClassCom extends Component {constrcutor(props) {super(props);}render() {return (<div>{ this.props.name }{ this.props.count }ClassCom</div>)}
}//    子组件FuncCom
export default function FuncCom(props) {return (<div>{ props.name }{ props.count }FuncCom!!{props.slotxx}</div>)
}

声明周期

类组件
//    初始化阶段
//    constructor执行
//    初始化state, 初始化一些其他数据//    合并state和props
static getDerivedStateFromProps(props, state) {return {...}
}//    类似于vue的beforeMount
//    如果类中有了getDerivedStateFromProps 那么这个声明周期不会被执行
componentWillMount() {
}//    类似于vue的mounted
componentDidMount() {
}/** 更新阶段  */
/** getDerivedStateFromProps存在的时候 该函数不执行  */
componentWillReceiveProps() {
}
/** 相当于是一个拦截器,返回bool值  */
shouldComponentUpdate() {
}
componentWillUpdate() {}
componentDidUpdate() {}/** 销毁阶段  */
componentWillUnmount() {}

函数组件

//    useEffect
//    有点像vue中的watch
useEffect(() => destory, deps);import React, { useEffect, useState } from 'react';
export default function FuncLifeCycle(props) {const [ state, setState ] = useState(() => {console.log('getDerivedStateFromProps');});useEffect(() => {console.log('componentDidMount');return () => {console.log('componentWillUnMount');}}, [])useEffect(() => {console.log('componentWillReceiveProps');}, [props])useEffect(() => {console.log('componentDidUpdate');})
}

Effect是如何模拟声明周期的?
上述代码即可!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置

文章目录 openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置265.1安装openEuler操作系统265.2 修改操作系统内核PAGESIZE为64KB。265.3 关闭CPU中断的服务irqbalance openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置 本…

OpenCV基本图像处理操作(八)——光流估计

光流估计 光流估计是一种用于检测图像序列中像素点运动的技术。它基于这样的假设&#xff1a;在连续的视频帧之间&#xff0c;一个物体的移动会导致像素强度的连续性变化。通过分析这些变化&#xff0c;光流方法可以估计每个像素点的运动速度和方向。 光流估计通常用于多种应…

idea 将项目上传到gitee远程仓库具体操作

目录标题 一、新建仓库二、初始化项目三、addcommit四、配置远程仓库五、拉取远程仓库内容六、push代码到仓库 一、新建仓库 新建仓库教程 注意&#xff1a;远程仓库的初始文件不要与本地存在名字一样的文件&#xff0c;不然拉取会因为冲突而失败。可以把远程一样的初始文件删…

Labview2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 LabVIEW是一种由美国国家仪器&#xff08;NI&#xff09;公司开发的程序开发环境&#xff0c;它显著区别于其他计算机语言&#xff0c;如C和BASIC。传统的计算机语言是基于文本的语言来产生代码&#xff0c;而LabVIEW则采用图形化…

HEF4046BT功能参数及避免使用的场景、应用前置放大器

制造商:NXP 产品种类:锁相环 PLL 类型:PLL 电路数量:1 电源电压 最大:15 V 电源电压 最小:3 V 最大工作温度: 85 C 安装风格:SMD/SMT 封装:SO-16 封装:Bulk 商标:NXP Semiconductors 最小工作温度:- 40 C 工作电源电压:3.3 V, 5 V, 9 V, 12 V HEF4046BT 是一种 CMO…

LINUX中使用cron定时任务被隐藏,咋回事?

一、问题现象 线上服务器运行过程中&#xff0c;进程有莫名进程被启动&#xff0c;怀疑是有定时任务自动启动&#xff0c;当你用常规方法去查看&#xff0c;比如使用crontab去查看定时器任务&#xff0c;提示no crontab for root 或者使用cat到/var/spool/cron目录下去查看定时…

Linux编辑器-vim的使用

vim的基本概念 vim的三种模式(其实有好多模式&#xff0c;目前掌握这3种即可),分别是命令模式&#xff08;command mode&#xff09;、插 入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09;&#xff0c;各模式的功能区分如下&#…

027——从GUI->Client->Server->driver实现对SR501的控制

目录 1、修改显示界面 2、 添加对SR501显示的处理和tcp消息的处理 3、 在服务器程序中添加对SR501的处理 4、 编写驱动句柄 5、 修改底层驱动 1、修改显示界面 有个奇怪的问题这里的注释如果用 就会报错不知道为啥&#xff0c;只能用#来注释 我把显示这里需要显示的器件的…

nginx部署上线

1. windows配置nginx 打包命令 npm run build:prod 1. 安装 nginx mac windows 2. mac / windows 环境下ngnix部署启动项目 2. nginx 解决 history 的 404 问题 3. nginx配置代理解决生产环境跨域问题

Docker构建Golang项目常见问题

Docker构建Golang项目常见问题 1 dockerfile报错&#xff1a;failed to read expected number of bytes: unexpected EOF2 go mod tidy: go.mod file indicates go 1.21, but maximum supported version is 1.17 1 dockerfile报错&#xff1a;failed to read expected number o…

rhce.定时任务和延迟任务项目

一 . 在系统中设定延迟任务要求如下&#xff1a; 在系统中建立 easylee 用户&#xff0c;设定其密码为 easylee 延迟任务由 root 用户建立 要求在 5 小时后备份系统中的用户信息文件到/backup中 确保延迟任务是使用非交互模式建立 确保系统中只有 root 用户和easylee用户可以…

minio如何配置防盗链

MinIO 是一个开源的对象存储服务器&#xff0c;用于存储大量的数据&#xff0c;同时提供了丰富的功能和 API。配置防盗链可以帮助你控制谁可以访问存储在 MinIO 上的对象。以下是在 MinIO 中配置防盗链的一般步骤&#xff1a; 编辑 config.json 文件&#xff1a; 找到 MinIO 服…

网工交换技术基础——VLAN原理

1、VLAN的概念&#xff1a; VLAN(Virtual LAN)&#xff0c;翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络&#xff0c;也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。 2、VLAN的主要作用&#xf…

『Django』创建app(应用程序)

theme: smartblue 本文简介 点赞 关注 收藏 学会了 在《『Django』环境搭建》中介绍了如何搭建 Django 环境&#xff0c;并且创建了一个 Django 项目。 在刚接触 Django 时有2个非常基础的功能是需要了解的&#xff0c;一个是“app”(应用程序)&#xff0c;另一个是 url(路由…

35. UE5 RPG制作火球术技能

接下来&#xff0c;我们将制作技能了&#xff0c;总算迈进了一大步。首先回顾一下之前是如何实现技能触发的&#xff0c;然后再进入正题。 如果想实现我之前的触发方式的&#xff0c;请看此栏目的31-33篇文章&#xff0c;讲解了实现逻辑&#xff0c;这里总结一下&#xff1a; …

【云计算】云数据中心网络(六):私网连接

云数据中心网络&#xff08;六&#xff09;&#xff1a;私网连接 1.什么是私网连接2.私网连接的组成3.私网连接的优势4.私网连接的主要应用场景 前面讲到 VPC 网络具有隔离性&#xff0c;VPC 之间无法通信。当一个 VPC 中的终端需要访问部署在另一个 VPC 中的服务时&#xff0c…

【C++题解】1345. 玫瑰花圃

问题&#xff1a;1345. 玫瑰花圃 类型&#xff1a;基本运算、小数运算 题目描述&#xff1a; 有一块nn&#xff08;n≥5&#xff0c;且 n 是奇数&#xff09;的红玫瑰花圃&#xff0c;由 nn 个小正方形花圃组成&#xff0c;现要求在花圃中最中间的一行、最中间的一列以及 4 个…

如何学习VBA_3.2.19:利用Shell函数运行可执行程序

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

Python学习教程(Python学习路线+Python学习视频):Python数据结构

数据结构引言&#xff1a; 数据结构是组织数据的方式&#xff0c;以便能够更好的存储和获取数据。数据结构定义数据之间的关系和对这些数据的操作方式。数据结构屏蔽了数据存储和操作的细节&#xff0c;让程序员能更好的处理业务逻辑&#xff0c;同时拥有快速的数据存储和获取方…

QAnything部署Mac m1环境

本次安装时Qanything已经更新到了v1.3.3&#xff0c;支持纯python安装。安装过程比较简单&#xff0c;如下&#xff1a; QAnything/README_zh.md at qanything-python-v1.3.1 netease-youdao/QAnything GitHub 首先需要用Anaconda3创建隔离环境&#xff0c;简要说明下Anaco…