React入门学习笔记2

news2024/10/6 16:31:09

jsx语法规则

  1. 定义虚拟DOM时,不要写引号。
  2. 标签中混入JS表达式时要用{ }。
  3. 样式的类名指定不要用class,要用className。
  4. 内联样式,要用style={{key:value}}的形式去写。
  5. 只有一个根标签
  6. 标签必须闭合
  7. 标签首字母
    1. )若小写字母开头,则将该标签转为html中同名元素,若html中无该标签对应的同名元素,则报错
    2. )若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。


js语句和js表达式

一定注意区分:【js语句(代码)】与【js表达式】

1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方

下面这些都是表达式:

  • (1). a
  • (2). a+b
  • (3). demo(1)
  • (4). arr.map()
  • (5). function test () {}

2.语句(代码):

下面这些都是语句(代码):

  • (1).if(){}
  • (2).for(){}
  • (3).switch(){case:xxx}

{ }中是放JS表达式!


模块与组件、模块化与组件化的理解

模块(当应用的js都以模块来编写的,这个应用就是一个模块化的应用)

  1. 理解:向外提供特定功能的js程序,一般就是一个js文件e
  2. 为什么要拆成模块:随着业务逻辑增加,代码越来越多且复杂。
  3. 作用:复用 js,简化js 的编写,提高js运行效率

组件(当应用是以多组件的方式实现的,这个应用就是一个组件化的应用)

  1. 理解:用来实现局部功能效果的代码和资源的集合(html/css/js/image等等)
  2. 为什么:一个界面的功能更复杂
  3. 作用:复用编码,简化项目编码,提高运行效率

组件实践

  • 函数式组件(适用于简单组件的定义)
  • class式组件(适用于复杂组件的定义)

 记住前面说的,组件标签是大写开头哦

函数式组件

执行力ReactDOM.render(<MyComponent />,document.getElementById('test'))之后,发送了什么?

        1.React解析组件标签,找到了MyComponent组件

        2.发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后出现在页面中。

函数式组件函数名就是组件名

同理,类式组件类名就是组件名

类式组件

执行了ReactDOM.render(<MyComponent />,document.getElementById('test'))之后,发送了什么?

        1.React解析组件标签,找到了MyComponent组件。
        2.发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法。

        3.将render返回的虚拟DOM转为真实DOM,随后呈现在页面中。


组件实例三大属性

1.state

实例讲解

构造函数中的this就是指向组件实例对象

只有通过组件实例调用的方法,方法中的this才不是undefined,而是指向实例对象。

如果渲染的时候在标签onClick属性中直接写this.方法,相当于直接把该方法拉出来赋给了onClick,当点击时是直接触发该方法本身而不是用组件实例去调用的。

类中的方法自动开启了局部的严格模式,所以类中方法的this为undefined。

但是呢,这个样子虽然可以唱成功让我们在方法中获取到组件实例对象

我们顺理成章就会想着用this.state.isHot=!this.state.isHot去修改isHot的值。

但打印出来发现值是改了可是react不认。

 

 状态(state)不可直接更改,我们需要借助一个内置的API更改——setState

 注意这里虽然是说是setState,但它进行的是一个更新操作而不是直接替换

所以我们可以使用setState灵活修改state中的部分值

在上面的程序中

构造器调用几次?

render调用几次?

方法changeWeather调用几次?

——我们可以在它们内部的第一行进行输出操作,然后我们就可以通过控制台查看输出情况获得答案

 所以

构造器调用几次?——1次

render调用几次?——1+n次

方法changeWeather调用几次?——点几次调几次

触发方法时,是先调用changeWeather,再进行渲染render


虽然上面那样子写很标准且没什么毛病,但是通过上面一系列我们发现实在是太麻烦了,如果我们有很多个类中方法,构造器中内容将会变得非常累赘

其实我们可以大大精简上面的代码,根本不需要用到构造器,在类中赋值语句相当于直接给类添加属性。

所以我们不需要在构造器中初始化state,我们可以把它提到外面来

而方法也不能简单地直接像上面那样写,应该使用赋值语句的形式+箭头函数。

箭头函数的特点是,在箭头函数内调用this,它会从箭头函数外面寻找this。

这样子一操作,代码就变成了这样子:

理解

(1)state是组件对象最重要的属性,值是对象(可以包含多个key-value 的组合)

(2)组件被称为"状态机",通过更新组件的state来更新对应的页面显示(重新渲染组件)

注意点

1)组件中 render 方法中的this为组件实例对象
2)组件自定义的方法中 this 为 undefined,如何解决?
        a.强制绑定this:通过函数对象的 bind()
        b.箭头函数
3)状态数据,不能直接修改或更新,要通过setState


2.props

实例讲解

回顾...展开运算符的用法

原生js中不能使用...展开运算符展开对象,但可以使用花括号加展开运算符进行深拷贝

直接用赋值语句的话相当于改变指向,不等于复制赋值。

在babel+react的作用下,可以使用后{...对象} 展开对象,但是仅仅适用于标签属性的传递。

如果要对prop传值进行类型限定和默认值设置

(记得导包)

 

应像下面这样子在类里面设置:

 函数式组件也可以使用props

 如果要对函数组件props进行限制

则放在函数外面,直接对函数组件实例添加限制

理解

(1)每个组件对象都会有props(properties的简写)属性

(2)组件标签的所有属性都保存在 props 中

作用

(1)通过标签属性从组件外向组件内传递变化的数据

(2)注意:组件内部不要修改 props 数据·(因为是只读的)

props总结

1)内部读取某个属性值

this.props.name

2)对props中的属性值进行类型限制和必要性限制

第一种方式(React v15.5开始已弃用)

 内置于React中,后进行改进,把prop-types库提取出来,减轻了React的重量

第二种方式(新):

使用prop-types库进行限制(需要引入prop-types库)

 

3)扩展属性:将对象的所有属性通过props传递

4)默认属性值

 

5)组件类的构造函数

3.refs与事件处理

理解

组件内的标签可以定义ref属性来标识自己

编码

有三种形式

(1)字符串形式的ref

注意这里是双引号 

注意,这种方法已经要被废弃了,官方不推荐使用

(2)回调形式的ref

 注意内联函数写法更新过程中会执行两次

 可以通过定义成class的绑定函数解决(类绑定)

 

(3)createRef创建ref容器

   

React.createRef调用后可以返回一个容器,该容器可以存储被ref所标识的节点

但!该容器是"专人专用"的!

但!这个方法是当前React最常用也是最推荐使用的。

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

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

相关文章

C语言技巧 ----------调试----------程序员必备技能

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; &#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382;…

pytorch中torch.einsum函数的详细计算过程图解

第一次见到 rel_h torch.einsum(“bhwc,hkc->bhwk”, r_q, Rh)这行代码时&#xff0c;属实是懵了&#xff0c;网上找了很多博主的介绍&#xff0c;但都没有详细的说明函数内部的计算过程&#xff0c;看得我是一头雾水&#xff0c;只知道计算结果的维度是如何变化的&#xf…

IDEA使用数据库(新手入门详细教程)

第一步:将数据库服务器打开 进入你下载好的数据库路径到bin目录下cmd打开命令提示符界面 确认启动数据库 第二步&#xff1a;打开IDEA&#xff0c;找到IDEA数据库 第三步&#xff1a;选择要连接数据库 第四步&#xff1a;根据数据库信息连接数据库 连接之前的页面 输入我们要的…

常温超导:AI在研发中的潜力

目录 引言&#xff1a;1. 常温超导的挑战&#xff1a;2. AI在材料研究中的作用&#xff1a;3. AI在理论模型中的作用&#xff1a;4. AI与实验室合作的潜力&#xff1a;结论&#xff1a; 引言&#xff1a; 常温超导一直被认为是科学界的“圣杯”&#xff0c;可以在室温条件下实…

谷歌seo推广怎么做

谷歌SEO&#xff08;搜索引擎优化&#xff09;推广是提高网站在谷歌搜索结果中的排名&#xff0c;从而获得更多有针对性的流量和潜在客户的过程。以下是一些关键步骤&#xff0c;帮助您进行谷歌SEO推广&#xff1a; 关键词研究&#xff1a;首先&#xff0c;进行详细的关键词研究…

公司植物日常护养方法备忘录

植物为我们净化空气&#xff0c;美化环境&#xff0c;我们要按照科学的经验照顾好它们。公司植物日常通用护养方法如下&#xff1a; 首先剪掉已经枯黄的部分。 需要晒太阳的植物按时搬到外面晒太阳&#xff0c;每次晒1到2个小时。 所有植物统一在每个月的20号左右施肥一次&am…

链表(二) 双链表操作详解

文章目录 四、双向带头循环链表的实现List.hList.c创建返回链表的头结点双向链表打印双向链表尾插双向链表尾删双向链表头插双向链表头删双向链表查找双向链表在pos的前面进行插入双向链表删除pos位置的节点 五、单链表与双链表比较 什么是链表及单链表的实现请跳转&#xff1a…

JS监听页面回退前进的方案

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 前言 在业务中遇到需求&#xff0c;App中的H5页面跳转到其他外链页面&#xff0c;外链页面修改了整个APP中的导航栏样式&#xff0c;回退到当前页面&…

微信开发之自动回复的技术实现

请求URL&#xff1a; http://域名地址/sendText 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是string登录实例标识wcId是string接收…

人物宣传稿怎么写?写作技巧有哪些?

人物宣传稿是一种介绍个人或组织成员的文案&#xff0c;旨在宣传其成就、特点和影响力。以下是一些人物宣传稿的写作技巧&#xff0c;帮助您撰写出生动、引人入胜的宣传稿。接下来伯乐网络传媒就来给大家讲解一下。 突出核心信息&#xff1a; 在宣传稿的开头&#xff0c;用简洁…

ARTS 挑战打卡的第1天,我学到了这些~

关于 ARTS 的释义 —— 每周完成一个 ARTS&#xff1a; ● Algorithm: 每周至少做一个 LeetCode 的算法题 ●Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个技术技巧 ● Share: 分享一篇有观点和思考的技术文章 深度学习 深度学习概念崛起框架 主页传送门&…

在线思维导图怎么绘制?学学这几种绘制方法

在线思维导图怎么绘制&#xff1f;思维导图是一种非常有效的学习和工作工具&#xff0c;可以帮助我们更好地组织和呈现信息&#xff0c;提高学习效率和工作效率。而在线思维导图的出现&#xff0c;更是为我们的绘制带来了极大的便利。现在也有很多绘制思维导图的方法&#xff0…

【RedisInsight】连入Docker容器可视化redis服务

文章目录 下载安装RedisInsight添加数据库添加docker容器内的redis数据库 下载安装RedisInsight 进入redis官网下载&#xff1a;https://redis.com/redis-enterprise/redis-insight/&#xff0c;安装过程一路Next即可。 打开桌面上的快捷方式启动&#xff1a;RedisInsight-v2…

windows创建占用特定端口程序

默认情况下&#xff0c;远程桌面使用的是3389端口。如果您想将远程桌面端口更改为8005&#xff0c;以达到模拟程序占用端口8005的情况&#xff0c;可以执行以下操作&#xff1a; 如执行以下命令&#xff0c;则1&#xff0c;2&#xff0c;3步相同操作可以跳过&#xff0c;直接往…

C++ 好用的日志库--spdlog

背景 spdlog 是一个快速、异步的、header-only 的 C 日志库。它提供了简单易用的 API 并具有高性能和可扩展性。 下载和使用 下载 spdlog 库下载地址&#xff1a;github 链接 hello world 在使用时只需要 include 整个 /include/spdlog 文件夹即可。 #include "spd…

【excel技巧】进阶版:excel文件批量提取文件名

前面给大家分享了简单的excel提取文件名方法&#xff0c;今天继续分享&#xff0c;进阶版excel文件批量提取文件名的方法。 点击excel工具栏中的【数据】功能&#xff0c;点击获取数据 – 来自文件 – 从文件夹 然后找到需要提取文件名的文件夹&#xff0c;点击打开&#xff0…

直线导轨使用中常见的问题有哪些?

直线导轨作为设备的核心部件之一&#xff0c;起着导向和支撑的作用功能。目前&#xff0c;已被广泛应用在各行各业中&#xff0c;大到机械设备&#xff0c;小到抽屉&#xff0c;我们都能看到直线导轨的身影&#xff0c;可以说&#xff0c;直线导轨已经悄无声息的进入到我们的生…

OC与Swift的相互调用

OC调用Swift方法 1、在 Build Settings 搜索 Packaging &#xff0c;设置 Defines Module 为 YES 2、新建 LottieBridge.swift 文件&#xff0c;自动生成桥 ProductName-Bridging-Header.h 3、在 LottieBridge.swift 中&#xff0c;定义Swift类继承于OC类&#xff0c;声明 obj…

站点可靠性工程 (SRE)

随着世界各地的组织努力开发安全、可靠、可扩展且可持续的 IT 基础架构&#xff0c;对高效基础架构监控和管理的需求日益增长&#xff0c;企业正在用不可扩展的遗留架构换取现代解决方案&#xff0c;在尖端技术的推动下&#xff0c;这些使基础设施管理过程更加顺畅和轻松&#…

Django学习笔记-默认的用户认证系统(auth)

一、Django默认的用户认证系统 Django 自带一个用户验证系统。它负责处理用户账号、组、权限和基于cookie的用户会话。 Django 验证系统处理验证和授权。简单来说&#xff0c;验证检验用户是否是他们的用户&#xff0c;授权决定已验证用户能做什么。这里的术语验证用于指代这…