React学习笔记


React学习笔记

原创 于 2026-03-04 22:47:28 发布 · 粉丝可见 · 104 阅读 · 0 · 0 GEO检测 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/149236921

构建项目

1
pnpm create vite@latest projectName -- --template react

基础入门

什么是 TSX

概念:TSX是TypeScript和XML(HTML)的缩写,表示在ts代码中编写HTML模版结构,它是React中编写UI模版的方式

优势:
1.HTML的声明式模版写法

2.Ts的可编程能力

TSX的本质

TSX并不是标准的TS语法,它是TS的语法扩展,浏览器本身不能识别,需要通过解析工具做解析之后才能在浏览器中运行。

在TSX中可以通过 大括号语法{} 识别TypeScript中的表达式,比如常见的变量、函数调用、方法调用等等。

  1. 使用引号传递字符串

  2. 使用TypeScript变量

  3. 函数调用和方法调用

  4. 使用TypeScript对象

注意:if语句、switch语句、变量声明属于语句,不是表达式,不能出现在{}中。

事件

事件绑定

语法: on + 事件名称 = {事件处理函数} ,整体上遵循驼峰命名法。

获取事件对象参数

语法:在事件回调函数中 设置形参e。

传递自定义参数

语法:事件绑定的位置改造 成箭头函数的写法 ,在执行clickHandler实际处理业务函数的时候传递实参。

注意:不能直接写函数调用,这里事件绑定需要一个 函数引用

同时传递事件对象和自定义参数

语法:在事件绑定的位置传递事件实参e和自定义参数,clickHandler中声明形参,注意顺序对应

组件

组件是什么

概念:一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间 可以互相嵌套,也可以复用多次。

组件化开发可以让开发者像搭积木一样构建一个完整的庞大的应用。

React组件

在React中,一个组件就是 首字母大写的函数 ,内部存放了组件的逻辑和视图U,渲染组件只需要把组件 当成标签书写 即可。

定义自定义按钮组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// src\view\study\compoments\CustomButton.tsx
const CustomButton = (
props: {
name?: string;
buttonName?: string;
}
) => {
const { buttonName,name } = props;
const handleClick = (name:string,e:React.MouseEvent<HTMLButtonElement>) => {
console.log(name,e);
alert('点击了 ' + name);
}
return (
<button onClick={(e) => handleClick((name ? name : 'Angindem'),e)}>
{buttonName ? buttonName : '按钮'}
</button>
);
}

export default CustomButton;

引用组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// src\view\study\study.tsx
import CustomButton from './compoments/CustomButton';
const Study = () => {
return (
<div>
this is a study
<CustomButton
name="Acoisin"
buttonName="Angiendem-Button"
/>
</div>
);
}

export default Study;

useState 基础使用

useState 是一个 React Hook(函数),它允许我们向组件添加一个 状态变量 ,从而控制影响组件的染结果。 (类似 Vue3 的ref , 动态响应式变量声明)

本质:和普通 ts 变量不同的是,状态变量一旦发生变化组件的视图UI也会跟着变化 (数据驱动视图)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// src\view\study\study.tsx
import { useState } from 'react';
const Study = () => {

const [count, setCount] = useState(0);

const handleAdd = () => {
setCount(count + 1);
};

return (
<div>
<button onClick={handleAdd}>
点击了 {count} 次
</button>
</div>
);
}

export default Study;

状态不可变

在React中,状态被认为是只读的,我们应该始终 替换它而不是修改它 ,直接修改状态不能引发视图更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// src\view\study\study.tsx
import { useState } from 'react';
const Study = () => {

const [count, setCount] = useState(0);

const handleAdd = () => {
// 直接修改,无法引发视图更新,它是常数,无法修改
count++;
};
const handleAdd2 = () => {
setCount(count + 1);
};

return (
<div>
<button onClick={handleAdd}>
点击了 {count} 次
</button>
<button onClick={handleAdd2}>
查看次数 {count} 次
</button>
</div>
);
}

export default Study;

修改对象状态

规则:对于对象类型的状态变量,应该始终传给set方法一个 全新的对象 来进行修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// src\view\study\study.tsx

import { useState } from 'react';
const Study = () => {

const [form, setForm] = useState({
name: 'Angindem',
});
const handleChange = (obj:object) => {
setForm({
...form,
...obj
});
}
return (
<div>
<button onClick={() => handleChange({
name: 'Acoisin',
age: 18,
sex: '男'

})}>
修改
</button>
<div className='view'>
<textarea disabled value={JSON.stringify(form, null, 5)}
style={{
width: '100%',
height: '150px'
}}
></textarea>
</div>
</div>
);
}

export default Study;

组件样式处理

React组件基础的样式控制有俩种方式

scss样式

1
2
3
4
5
6
7
8
9
10
11
12
13
// src\view\study\module\study.module.scss

.box {
width: 100px;
height: 100px;
background: red;

.box2 {
width: 50px;
height: 50px;
background: blue;
}
}

引用外部样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// src\view\study\study.tsx
import style from './module/study.module.scss';
const Study = () => {

return (
<div className={style.box}>
<div className={style.box2}>
这是一个盒子
</div>
</div>
);
}

export default Study;

classnames优化类名控制

classnames是一个简单的JS库,可以非常方便的通过条件动态控制class类名的显示

示例:

现在的问题:字符串的拼接方式不够直观,也容易出错

安装:

1
pnpm add classnames

使用后提高代码可读性

受控表单绑定

概念:使用React组件的状态(useState)控制表单的状态

React中获取DOM

在 React 组件中获取/操作 DOM,需要使用 useRef 钩子函数,分为两步:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// src\view\study\study.tsx
import { useState, useRef } from 'react';
//1.useRef生成ref对象 绑定到dom标签身上
//2.dom可用时,ref.current获取dom
// 渲染完毕之后dom生成之后才可用
const Study = () => {
const [value, setValue] = useState<string>('');

const inputRef = useRef<HTMLInputElement>(null);

return (
<div>
<input type="text" ref={inputRef} value={value} onChange={(e) => setValue(e.target.value)} />
<button onClick={() => {
console.log(inputRef.current);
}}>提交</button>
</div>
);
}
export default Study;

觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭

微信二维码

wechat pay

支付宝二维码

ali pay

React学习笔记
http://blog.angindem.cn/2026/03/04/Angindem-CSDN博客/197_197/
作者
Angindem
发布于
2026年3月4日
许可协议