千锋教育2022版React全家桶教程_react零基础入门到项目实战完整版
2023-07-17 01:15 作者:bili_55041909658 | 我要投稿

useState使用时需要通过react引入
import React, { useState } from 'react'
返回值是是一个数组,第一个元素是状态(初始值默认是传入参数),第二个元素是改变状态的函数
const obj = useState("aaa") console.log("obj", obj);
匿名函数可以抽出放到外面,setStr改变状态的函数不能放在return前面,否则会死循环;就像setState不能放在render之内,return之前一样
const changeHandler = () => { setStr("bbb") } <button onClick={changeHandler}>修改</button>
不能直接赋值给状态,会报错:不能给常量赋值变量
str = "yyy"
set改变状态的函数也是一个异步的,调用此函数后打印当前状态,还是显示更新之前的状态
const [text, setText] = useState("") const inputHandle = (e) => { setText(e.target.value) //输入u console.log("text", text); //打印初始值空字符串 }
不过调用setText方法会重新渲染,函数会再调用一次。因此在function内 return之前会得到更新后的值
console.log("text", text); //输入框内输入u,此处会打印u return ()
想在数组上新增,操作原数组会失效
const addHandle = (e) => { list.push(text) setList(list) //失效 }
先在原数组上新增,再把原数组的复制版本赋值给set函数倒是可以生效
const addHandle = (e) => { list.push(text) setList([...list]) }
把新数组当作参数传给函数也可以生效
const addHandle = (e) => { let newList = [...list, text] setList(list) }
如果某些函数需要传参,就得把匿名函数写在标签内了
{list.map((item, index) => { return <div key={item}> {item} <button onClick={() => { delHandler(index) }}>删除</button> </div> })}
如果数组为空,就显示“暂无列表”,这是if的简写
{!list.length && <div>暂无列表</div>}