react - 02.useState

61 阅读1分钟

1.useState

useState是React的内置函数,作用是让函数组件也可以维护自己的状态,简单的理解就是,useState是改变状态的开关,能够完成对状态的初始化,读取和更新

useState返回一个,其中第一项是状态值,第二项是一个更新状态的函数

useState默认值是undefined

useState语法:

const [userName, resetName] = useState("xiaoming")
// 以函数形式赋值
const [userName, resetName] = useState(() => {
  return "xiaoming"
})
// 以对象形式赋值
const [userName, resetName] = useState({
  userName:"xiaoming"
})

需要注意的是,如果以函数的形式赋值,javascript引擎每次都会解析初始值,如果写成箭头函数形式,该函数就不会立即执行,只有在第一次初始化函数用到的时候,才会执行,这样可以减少计算过程

例子:

import { useState } from 'react'
const App = () => {
  const [userName, resetName] = useState("xiaoming")
  const handleChange = () => {
    resetName("xiaohong")
  }
  return (
    <div>
      <button onClick={handleChange}>click: {userName}</button>
    </div>
  )
}
export default App

需要注意的是,useState不会自动合并更新对象,所以需要使用展开运算符...或者Object.assign

import { useState } from 'react'
const App = () => {
  type Person = {
    name: string,
    age: number,
    sex: boolean,
    height: string | number
  }
  const [userName, resetName] = useState<Person>({
    name: "xiaoming",
    age: 22,
    sex: true,
    height: ""
  })
  const requestHandle = () => {
    const data = { height: "180" }
    const info = { ...userName, ...data }
    resetName(info)
  }
  return (
    <div>
      <div>userName: {userName.name}</div>
      <div>userAge: {userName.age}</div>
      <div>userSex: {userName.sex ? '男' : '女'}</div>
      <div>userHeight: {userName.height}</div>
      <button onClick={requestHandle}>change</button>
    </div>
  )
}
export default App

需要注意的是:

最好将useState写在函数的起始位置,主要是为了方便阅读

严禁让useState出现在代码块,以及判断和循环中

useState返回的函数,数组的第二项,引用这个是不会变化的