0
点赞
收藏
分享

微信扫一扫

ReactHooks专题-useState

白衣蓝剑冰魄 2022-01-31 阅读 71

useState的基本使用

import React from 'react'
import { useState } from 'react';

const FnCom = (props) => {
  let [counter,setCounter]=useState(9)
  return(
    <div>
      <div>FnCom-{counter}</div>
      <button onClick={()=>{
        setCounter(counter+1)
      }}>+</button>
      <button onClick={()=>{
        setCounter(counter-1)
      }}>-</button>
    </div>
   )
  }

export default FnCom
  • useState来自react,需要从react中引入,它是一个hooks
    • 元素一:当前状态的值(第一调用为初始化的值)
    • 元素二:设置状态值的函数;
    • 参数:初始化值,如果不设置默认为undefined
    • 返回值:数组,包括两个元素(元素一,元素二)
  • 点击button按钮后,会完成两件事;
    • 调用setCount,设置一个新的值
    • 组件重新渲染,并且根据新的值返回DOM结构;
  • React在重新渲染时,会保留这个state状态,并不会每次都使用初始化的值;
const [counter,setCounter]=useState(6)
// 等价于
const counter=useState(6)[0]
const setCounter=useState(6)[1]

Hooks就是JavaScript函数,这个函数可以帮助你钩入(hook into)React State以及生命周期等特性;

但是使用它们会有两个额外的规则;

  • 只能在函数最外层调用Hooks,不要在循环,条件判断或者子函数中调用;
  • 只能在React的函数式组件中调用Hooks,不要在其他JavaScript函数中调用(还有一个地方可以调用Hooks–自定义的Hook中);

State HookAPI就是useState

  • useState会帮助我们定义一个state变量useState是一种新方法,它与class组件里面的this.state提供的功能完全相同。一般来说,在函数退出后变量就会消失,而state中的变量会被React保留;
  • useState接受唯一一个参数,在第一次组件调用时使用来作为初始化的值(如果传递参数,那么初始化的值为undefined)
  • useState的返回值是一个数组,我们可以通过数组的解构,来完成赋值会非常方便;

FQA:为什么叫useState而不叫createState

  • create可能不是很准确,因为state只在组件首次渲染的时候创建。
  • 在下一次重新渲染时,useState返回给我们当前的state
  • 如果每次都创建新的变量,他就不是state了;
  • 这也是Hook的名字总是以use开头的一个原因;

当然,我们也可以在一个组件中定义多个变量和复杂变量(数组,对象)

import React from 'react'
import { useState } from 'react';

const FnCom = (props) => {
  const [age, setAge] = useState(0);
  const [names, setNames] = useState(["张三", "李四"]);
  const [info, setInfo] = useState({name: "王五", age: 18});
  return(
    <div>
      <h2>当前年龄:{age}</h2>
      <button onClick={()=>{
        setAge(age+1)
      }}>年龄+1</button>
      <h2>朋友列表</h2>
      <ul>
        {
          names.map((item,index)=>{
            return <li key={index}>{item}</li>
          })
        }
      </ul>
      <button onClick={()=>{
        setNames([...names,"赵六"+new Date().getTime()])
      }}>添加好友有效</button>
      <button onClick={()=>{
        names.push("老八")
        console.log(names);
        setNames(names)
      }}>添加好友无效</button>
      <h2>我的信息</h2>
    <div>我的名字:{info.name}</div>
    <button onClick={()=>{
      setInfo({...info,name:"李雷"})
    }}>修改名字</button>
    </div>
   )
  }

export default FnCom
举报

相关推荐

0 条评论