React笔记-React入门
主要是现在要改一个开源项目,需要学习下React入门,在此记录一下。
几个关键的库
React底层核心:react.development.js
React操作DOM库:react-dom.development.js
解析ES6语法:babel.min.js
React.createElement() //创建元素
如创建一个节点:
let hello = ReactDOM.createElement('h1', {}, 'Hello World')ReactDOM.render() //渲染元素
如:
ReactDOM.render(hello, document.getElementById('app1'))
或如:
<script type = "text/babel">ReactDom.render(<h1>Hello World</h1>document.getElementById('app');)</script>React.Component //创建组建,使用extends继承
添加Class
<style>.yellow{Color: yellow;}</style>
ES5:
let hello = React.createElement('h1',{className: 'yellow'},ReactDOM.render(hello, document.getElementById('app'));)
ES6:
let world = 'world'let hello = <h1 className="yellow">Hello {world}</h1>ReactDOM.render(template,Document.getElementById('app'))
元素渲染(数据动态更新)
function tick(){let time = new Date().toLocaleTimeString();let template = <div><h1 className=”red”>Hello world</h1><h2>现在是: {time}</h2></div>ReactDOM.render(template,Document.getElementById('app'))}setInterval(tick, 1000)
组件
React中组件:
无状态组件(函数式组件):
①直接定义函数的形式,不存在state,只会有props,没有生命周期;
②只展示不修改用无状态组件;
③传值时无状态组件取值用props.属性。
有状态组件(React.Component):
①使用class定义,extends继承,有state进行数据的存储和管理,还可以用props,有生命周期;
②不仅仅展示,还要修改,用无状态组建。
③传值时有状态组件取值用this.state或this.props.属性。
无状态组建
<div id="app1"></div><script type="text/babel">//函数式组建function Hello(){return <h1>Hello World</h1>}ReactDOM.render(<Hello/>,Document.getElementById('app1'))</script>
如props传值(无状态组建)
<div id="app1"></div><script type="text/babel">//函数式组建function Hello(){return <div><h1>姓名:{props.name}</h1><h2>年龄:{props.age}</h1></div>}ReactDOM.render(<Hello name="it1995" age="18" />,Document.getElementById('app1'))</script>
如有状态组建
<div id="app1"></div><script type="text/babel">class Hello extends React.Component {//有状态组建需要使用render方法,是生命周期的底层方法render(){return <h1>Hello World</h1>}}ReactDOM.render(<Hello/>,document.getElementById('app1'))</script>
如props传值(有状态组件)
<div id="app1"></div><script type="text/babel">class Hello extends React.Component {//有状态组建需要使用render方法,是生命周期的底层方法render(){return <div><h1>姓名:{this.props.name}</h1><h1>年龄:{this.props.age}</h1></div>}}ReactDOM.render(<Hello name="it1995" age="18"/>,document.getElementById('app1‘’))</script>
事件处理
<div id="app1"></div><script type="text/babel">class Hello extends React.Component {constructor(props){super(props) //需要先让父类先处理下this.state = { //这种情况,只能放到this.state中name: ‘it1995’,age: 20}this.updateInfo = this.updateInfo.bind(this)}updateInfo = () =>{this.setState({ //这里必须用setStatename: 'it1995',age: 18})}updateInfo2(){ //如果这样定义函数this.setState({ //这里必须用setStatename: 'it1995',age: 18})}updateInfo3(){ //如果这样定义函数this.setState({ //这里必须用setStatename: 'it1995',age: 18})}updateInfo4(){ //如果这样定义函数this.setState({ //这里必须用setStatename: 'it1995',age: 18})}//有状态组建需要使用render方法,是生命周期的底层方法render(){return <div><h1>姓名:{this.state.name}</h1><h1>年龄:{this.state.age}</h1><button onClick={this.updateInfo}>更新数据</button><button onClick={this.updateInfo2}>更新数据</button><button onClick={()=>this.updateInfo3()}>更新数据</button><button onClick={this.updateInfo4()}>更新数据</button></div>}}ReactDOM.render(<Hello name="it1995" age="18"/>,document.getElementById('app1'))</script>
列表渲染
<div id="app1"></div><script type="text/babel">class Hello extends React.Component {state = {list: [1, 2,3,4,5]}//有状态组建需要使用render方法,是生命周期的底层方法render(){const arr = this.state.listconst lists = []for(let i = 0; i < arr.length; i++){let li = <li>{arr[i]}</li>lists.push(li)}return <div><ul>{lists}</ul></div>}}ReactDOM.render(<Hello />,document.getElementById('app1'))</script>
循环Key的使用
<div id="app1"></div><script type="text/babel">class Hello extends React.Component {state = {list: [1, 2,3,4,5]}//有状态组建需要使用render方法,是生命周期的底层方法render(){const arr = this.state.listconst lists = []arr.map((item, index) => {let li = <li key={index}>{item}</li>lists.push(li);})return <div><ul>{lists}</ul></div>}}ReactDOM.render(<Hello />,document.getElementById('app1'))</script>
列表循环
<div id="app1"></div><script type="text/babel">class Hello extends React.Component {state = {list: [{id: 1, txt: "Java"},{id: 2, txt: "C/C++"},{id: 3, txt: "JavaScript"}]}//有状态组建需要使用render方法,是生命周期的底层方法render(){const arr = this.state.listconst lists = []arr.map((item, index) => {let li = <li key={index.id}>{item.txt}</li>lists.push(li);})return <div><ul>{lists}</ul></div>}}ReactDOM.render(<Hello />,document.getElementById('app1'))</script>
条件处理
<div id="app1"></div><script type="text/babel">function Login(){return <button>Login</button>}function Logout(){return <button>Logout</button>}class App extends React.Component {state = {isLogin: true}//有状态组建需要使用render方法,是生命周期的底层方法render(){const {isLogin} = this.statereturn <div>{isLogin ? <Login/> : <Logout/>}</div>}}ReactDOM.render(<App/>,document.getElementById('app1'))</script>
优化写法
<div id="app1"></div><script type="text/babel">function Login(){return <button>Login</button>}function Logout(){return <button>Logout</button>}class App extends React.Component {state = {isLogin: true}//有状态组建需要使用render方法,是生命周期的底层方法render(){const isLogin = this.state.isLoginlet buttonif(isLogin)Button = <Login/>elseButton = <Logout/>return <div>{button}</div>}}ReactDOM.render(<App/>,document.getElementById('app1'))</script>
条件&事件处理
<div id="app1"></div><script type="text/babel">function Login(){return <button>Login</button>}function Logout(){return <button>Logout</button>}class App extends React.Component {state = {isLogin: true}updateInfo1 = () =>{this.setState({isLogin: !this.state.isLogin})}updateInfo2(){this.setState({isLogin: !this.state.isLogin})}//有状态组建需要使用render方法,是生命周期的底层方法render(){const isLogin = this.state.isLoginreturn <div>{isLogin ? <Login/> : <Logout/>}<button onClick={this.updateInfo1}>更新数据</button><button onClick={this.updateInfo2.bind(this)}>更新数据</button></div>}}ReactDOM.render(<App/>,document.getElementById('app'))</script>
相关文章:

React笔记-React入门
主要是现在要改一个开源项目,需要学习下React入门,在此记录一下。 几个关键的库 React底层核心:react.development.js React操作DOM库:react-dom.development.js 解析ES6语法:babel.min.js React.createElement() …...

SD WebUI 扩展:prompt-all-in-one
sd-webui-prompt-all-in-one 是一个基于 Stable Diffusion WebUI 的扩展,旨在提高提示词/反向提示词输入框的使用体验。它拥有更直观、强大的输入界面功能,它提供了自动翻译、历史记录和收藏等功能,它支持多种语言,满足不同用户的…...

Go和Java实现中介者模式
Go和Java实现中介者模式 下面通过一个同事之间相互通信的例子来说明中介者模式的使用。 1、中介者模式 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的 通信,并支持松耦合,使代码…...

CentOS系统环境搭建(十五)——CentOS安装Kibana
centos系统环境搭建专栏🔗点击跳转 关于Elasticsearch的安装请看CentOS系统环境搭建(十二)——CentOS7安装Elasticsearch。 CentOS安装Kibana 文章目录 CentOS安装Kibana1.下载2.上传3.解压4.修改kibana配置文件5.授予es用户权限6.kibana 后台…...

简单的洗牌算法
目录 前言 问题 代码展现及分析 poker类 game类 Text类 前言 洗牌算法为ArrayList具体使用的典例,可以很好的让我们快速熟系ArrayList的用法。如果你对ArrayList还不太了解除,推荐先看本博主的ArrayList的详解。 ArrayList的详解_WHabcwu的博客-CSD…...

vscode用ssh远程连接linux
1、vscode是利用ssh远程连接linux的,所以首先确保vscode已经安装了这两个插件 2、点击左下角的连接 3、选择Connect to Host…… 5、按格式输入 ssh 主机名ip 比如我的:ssh mnt192.168.198.128 6、选择第一个打开配置文件,确保输入正确 7、…...

chapter 3 Free electrons in solid - 3.2 量子自由电子理论对一些现象的解释
3.2 自由电子气的热容 Heat capacity of free electron gas 3.2.1 计算自由电子的热容 Calculation of Heat Capacity of free Electrons T>0K, total energy of free electrons: E ∫ E d N 3 5 N e E F 0 [ 1 5 12 π 2 ( k B T E F 0 ) 2 ] E \int EdN \frac{3}{5}…...

vue实现打印功能
在Vue应用中调用打印机功能,可以使用JavaScript的window.print()方法。这个方法会打开打印对话框,然后让我们选择打印设置并打印文档,但是尼这种方法依赖于浏览器的打印功能。 以下是一个简单的示例,演示如何在Vue组件中调用打印…...

golang—面试题大全
目录标题 sliceslice和array的区别slice扩容机制slice是否线程安全slice分配到栈上还是堆上扩容过程中是否重新写入go深拷贝发生在什么情况下?切片的深拷贝是怎么做的copy和左值进行初始化区别slice和map的区别 mapmap介绍map的key的类型map对象如何比较map的底层原…...

Spring、Springboot、SpringCloud--包含的知识点大全
类型难度AOPspring-自定义AOP面向切面注解--统一切面处理-登陆信息采集快速入门SpringbootAOP实现切面处理请求Demo线程池通俗易懂的线程池底层原理,一文知所有数据结构数据结构-链表篇数据结构--数组篇数据结构之-concurrentHashMap源码分析JVMJVM调优及各种问题处…...

MongoDB:数据库初步应用
一.连接MongoDB 1.MongoDBCompass连接数据库 连接路径:mongodb://用户名:密码localhost:27017/ 2.创建数据库(集合) MongoDB中数据库被称为集合. MongoDBCompass连接后,点击红色框加号创建集合,点击蓝色框加号创建文档(数据表) 文档中的数据结构(相当于表中的列)设计不用管…...

C#之枚举中的按位与()按位或(|)。
一些基础定义: 按位或运算符(|)是一种位运算符,用来对两个二进制数进行操作。对于每个位上的1,如果至少有一个二进制数中的对应位为1,则结果为1;否则,结果为0。按位与运算符&#x…...

Blazor前后端框架Known-V1.2.12
V1.2.12 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazo…...

bug记录:微信小程序 给button使用all: initial重置样式
场景:通过uniapp开发微信小程序 ,使用uview的u-popup弹窗,里面内嵌了一个原生button标签,因为微信小程序的button是有默认样式的,所以通过all: initial重置样式 。但是整个弹窗的点击事件都会被button上面的点击事件覆…...

【计算机视觉|生成对抗】带条件的对抗网络进行图像到图像的转换(pix2pix)
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Image-to-Image Translation with Conditional Adversarial Networks 链接:Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…...

[时序数据库]:InfluxDB进阶
文章目录 1 摘要2 背景2.1 问题一:针对Influx V2.0工具2.2 问题二:针对Influx查询语言 3 需求分析4 快速入门4.1 客户端驱动版本选择4.2 连接influx4.2.1 influx配置信息4.2.2 influx连接配置4.2.3 测试连通情况 5 Influx工具类5.1 InfluxQL工具类5.1.1 …...

uniapp编写微信小程序遇到的坑总结
1、阻止事件冒泡 使用uniapp开发微信小程序的时候,发现使用click.stop来阻止事件冒泡没有作用,点击了之后发现仍然会触发父组件或者祖先组件的事件。 在网上查阅,发现使用tap.stop才能阻止事件冒泡。 2、二维码生成 在网上找了很多&…...

Binary operator ‘*‘ cannot be applied to two ‘Double?‘ operands
在 swift 中声明 Double 类型参数变量在进行运算处理时抛出了如下异常 Binary operator * cannot be applied to two Double? operands 情况一 参数类型不匹配,需将参数类型进行匹配 self.max height / (length * width) // 初始 self.max height / (length * Double(wid…...

C#如何打包EXE程序生成setup安装文件
项目结束之后,有需要将winForm程序打包成.exe文件提供给用户。 这里记录一下打包过程。 1:首先获取打包插件,如果你的VS已经安装,忽略此步骤。 点击 工具->扩展和更新,选择联机,搜索installer&#x…...

【python实现向日葵控制软件功能】手机远程控制电脑
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人_python人工智能视觉(opencv)从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了: https://blog.csdn.net/lbcy…...

手机系统录屏怎么录?有什么其他录制方法和注意事项?
手机系统录屏是一种很方便的方式,可以用于录制游戏、教程视频,或者是跟别人分享一些操作。在不同的手机系统中,录制方法可能会有所不同,以下是一些通用的步骤分享以及其他录制工具的分享,有需要的小伙伴们快来看一看吧…...

记录一个编译TubeTK时的报错:at_check问题
在使用如下命令安装TubeTK的cuda_nms时,报了一个错误,记录一下这个错误和解决办法 (base) redmeryredmery:~/Desktop/MOT/TubeTK/post_processing/nms$ python setup.py build_ext --inplace因为这个命令是在/home/redmery/Desktop/MOT/TubeTK/install/…...

k8s v1.27.4二进制部署记录
记录二进制部署过程 #!/bin/bash#升级内核 update_kernel() {rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgyum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpmyum --disablerepo"*" --enablerepo"elrepo-kernel&q…...

C# API 文档注释规范
C# API 文档注释规范 1. 命名空间注释(namespace)2. summary3. remarks and para4. param5. returns6. example and code7. exception8. typeparam 最近在开发工作中需要实现 API 帮助文档,如果根据所写的代码直接重写 API 帮助文档将会是意见非常大的工作量&#x…...

分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测
分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测 目录 分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 Matlab实现分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预…...

《深度剖析K8s》学习笔记
一、容器技术 1.从进程说起 a. 概述 进程:数据和状态的综合 容器技术的核心:约束和修改进程的动态表现,创造出边界(Cgroup:约束/namespace:进程视图) 启动容器例子: docker ru…...

神经网络基础-神经网络补充概念-49-adam优化算法
概念 Adam(Adaptive Moment Estimation)是一种优化算法,结合了动量梯度下降法和RMSProp的优点,用于在训练神经网络等深度学习模型时自适应地调整学习率。Adam算法在深度学习中广泛应用,通常能够加速收敛并提高模型性能…...

Java:正则表达式书写规则及相关案例:检验QQ号码,校验手机号码,邮箱格式,当前时间
正则表达式 目标:体验一下使用正则表达式来校验数据格式的合法性。需求:校验QQ号码是否正确,要求全部是数字,长度是(6-20)之间,不能以0开头 首先用自己编写的程序判断QQ号码是否正确 public static void main(String[] args) {Sy…...

图数据库_Neo4j_Centos7.9安装Neo4j社区版3.5.4_基于jdk1.8---Neo4j图数据库工作笔记0011
首先上传安装包,到opt/soft目录 然后看一下jdk安装的是什么版本的,因为在neo4j 4以后就必须要用jdk11 以上的版本,我这里还用着jdk1.8 所以 我这里用3.5.4的版本 关于下载地址: https://dist.neo4j.org/neo4j-community-3.5.4-unix.tar.gz 然后再去解压到/opt/module目录下 …...

使用Rust编写的一款使用遗传算法、神经网络、WASM技术的模拟生物进化的程序
模拟生物进化程序 Github地址:FishLife 期待各位的star✨✨✨ 本项目是一个模拟生物进化的程序,利用遗传算法、神经网络技术对鱼的眼睛和大脑进行模拟。该项目是使用 Rust 语言编写的,并编译为 WebAssembly (Wasm) 格式,使其可以…...