JSX
概念
JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模版结构。它是React中编写UI模版的方式。
例如:
1 | const message='this is message'; |
优势
- HTML的声明式模版写法
- JS的可编程能力
劣势
- HTML与JS组合在一起阅读有些困难
本质
JSX并不是标准的JS语法,是JS的语法拓展,浏览器本身无法识别,通过解析工具后在浏览器中运行。
JSX中使用JS表达式
识别表达式
在JSX中可以通过大括号语法识别JavaScript中的表达式。
- 使用引号传递字符串
- 使用JavaScript变量
- 函数调用和方法调用
- 使用JavaScript对象
例如
1 | const number = 1; |
实现列表渲染
在JSX中使用原生JS中的map
方法遍历渲染列表
map()
方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
例如
1 | const lists = [ |
注意
在渲染li
标签的时候,React要求每个元素上面要绑定一个key值(独一无二),可以是字符串也可以是数字。
作用
React框架内部使用 提升更新性能
实现条件渲染
基础条件渲染
- 逻辑与运算符&&
- 三元表达式( ? : )
例如
1 | {flag && <span>Only display when flag is true</span>} |
复杂条件渲染
如果出现多种条件的渲染应该怎么写呢?
这个时候就需要使用自定义函数+if判断语句
例如
1 | function getType(type) { |
事件绑定
语法
on + 事件名称 = {事件处理程序}
,整体上遵循驼峰命名法
1 | const handleClick = () => { |
使用事件对象参数
语法
在事件回调函数中设置形参e
。
1 | const handleClick = (e) => { |
传递自定义参数
语法
事件绑定的位置改造为箭头函数的写法,在执行clickHandler的时候传递实参。
注意
!不能直接写函数调用,事件绑定需要一个函数引用
1 | const handleClick = (name) => { |
同时传递事件对象和自定义参数
语法
在事件绑定的位置传递事件实参e
和自定义参数,clickHandler中声明形参,注意位置对应。
1 | const handleClick = (e, name) => { |
组件
概念
一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间可以互相嵌套,也可以复用多次。
React组件
在React中,一个组件就是首字母大写的函数,内部存放了组件的逻辑和视图UI,渲染组件只需要把组件当做标签书写即可。
例如
1 | // 1.定义组件 |
样式处理
1. 行内样式(不推荐)
1 | <div style={{color: 'red'}}>this is a div</div> |
最外层的{}表示要使用JS表达式,内层的{}表示构造一个对象.
2. class类名控制
样式写在css内,文件头处导入css.
1 | /* index.css */ |
1 | /* App.js */ |
注意原来的class
要写作className
。
useState(重要)
基础使用
useState是一个React Hook(函数),它允许我们向组件添加一个状态变量,从而控制影响组件的渲染结果。
文件头使用
import { useState } from 'react'
导入函数.
本质
和普通JS变量不用的是,状态变量一旦发生变化,组件的视图UI也会跟着变化(数据驱动视图)
状态变量改变之后React知道这个状态变了就会重新更新渲染. 如果只是js的let变量改变了,React框架并不知道是否更新,也就不会同步渲染.
语法
const [count, setCount] = useState(0);
- useState是一个函数,返回值是一个数组
- 数组中的第一个参数是状态变量,第二个参数是set函数用来修改状态变量
- useState的参数作为count的初始值
例如
1 | // 修改变量 |
修改状态规则
状态不可变
在React中,状态被认为是只读的,我们应该始终替换它而不是修改它,直接修改状态不能引发视图更新.
不能直接用
=
来设置状态变量的值,这样子不会更新渲染!
修改状态用对应的set函数