05-表单绑定,列表渲染
码路教育 7/24/2023
# 一,表单绑定,列表渲染
关于表单绑定和列表渲染,我们集成到todolist中讲解。
# 1,类组件实现todolist
把表单变成受控表单,收集表单中的数据,如下:
此时,我们就可以收集表单的数据,如下:
在React中,收集数据,需要写一个value,还需要写一个onInput,如果不写onInput,会后错,如下:
根据人家建议,换成onChange,如下:
当点击添加按钮,就需要把收集到的todo存起来,如下:
把每一个todo存储到数组中,如下:
浏览器测试如下:
添加完数据,需要把数据清空,如下:
测试如下:
需要把list中的数据渲染出来:
我们把数据一片html代码,浏览器渲染出来,在vue中通过v-for,在react中,渲染数据,99%都通过map方法,
map方法可以对数据进行加工,代码如下:
浏览器测试如下:
刚才是点击按钮实现添加,现在想按回车键实现添加,如下 :
实现对应的方法,如下:
浏览器测试如下:
我要实现删除功能,如下:
浏览器测试效果如下:
实现对应的删除方法,如下:
测试OK,如下:
总结:
- 受控表单:一个表单的value或checked由state来决定,通过控制state就可以修改表单数据,这样的表单叫受控表单。
- 受控组件:一个组件的自定义属性由状态来控制,只有这个状态发生变化,组件才能更新。后面讲。
- 列表渲染:在React中,通过map方法实现。因为map方法,可以对数据进行加工,返回新的数据(jsx);
# 2,函数组件实现todolist
直接上代码如下:
import { useState } from "react"
function DemoA() {
let [todo, setTodo] = useState("")
let [list, setList] = useState([])
let confirm = () => {
if (!todo.trim()) return;
setList([...list, { id: Date.now(), task: todo }])
setTodo("")
}
let delTodo = (id) => {
setList(list.filter(ele => ele.id != id))
}
let addByEnter = e => {
if (e.keyCode === 13) {
confirm();
}
}
return (
<div>
<div>
<input type="text" value={todo}
onChange={e => setTodo(e.target.value)}
onKeyUp={e => addByEnter(e)}
/>
<button onClick={confirm}>添加</button>
<hr />
<div>
{
list.map(item => (
<div key={item.id}>
<span>{item.id}</span>
<span>--</span>
<span>{item.task}</span>
<button onClick={() => delTodo(item.id)}>X</button>
</div>
))
}
</div>
</div>
</div>
)
}
export default DemoA;
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
38
39
40
41
42
43
44
45
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
38
39
40
41
42
43
44
45
作业:
todlist打完,部署,上线,发连接到群里,必须的。
jsx元素本质是一个对象,是React.createElement调用的返回值,这个返回值是一个对象,JSX对象可以叫做”fiber单元",很多很多的嵌套的”fiber单元"就会构成”fiber树"。