React Hook入门系列(1)-- useState

112 阅读1分钟

简介

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

优势

  • 简化组件逻辑
  • 复用状态逻辑
  • 无需使用类组件编写

so,我们来学习第一个“Hook” - useState

语法

import React, { useState } from 'react'

function State() {
    // 声明一个叫 'age' 的 state变量
    const [ age, setAge ] = useState(18)    // 默认值
    return (<div>
        年龄:{ age } <br />
        <button onClick={() => {
            setAge(age + 1)
        }}>长一岁</button>
    </div>)
}

如果多个state变量的情况下怎么办呢?话不多说,直接上代码

import React, { useState } from 'react'

function State() {
    const [ name, setName ] = useState('乌鸦')
    const [ age, setAge ] = useState(18)
    return (<div>
        姓名:{ name } <br />
        年龄:{ age }  <br />
        <button onClick={() => {
            setAge(age + 1)
        }}>长一岁</button>  <br />
        <button onClick={() => {
            setName('苏格拉没有底')
        }}>换个名字</button>
    </div>)
}

那可不可以将多个变量合并到一个state里呢?代码如下:

import React, { useState } from 'react'

function State() {
  let [ state, setState ] = useState({
      name: '乌鸦',
      age: 18
  })
  let { name, age } = state
  return (<div>
      姓名:{ name }  <br />
      年龄:{ age }   <br />
      <button onClick={() => {
          setState({
              ...state,    // 注意一定要先解构之前的state
              age: age+1
          })
      }}>长一岁</button>  <br />
      <button onClick={() => {
          setState({
              ...state,
              name: '苏格拉没有底'
          })
      }}>换个名</button>
  </div>)
}

但是这种方法不推荐,大家还是按照上面的方法通过编写多个useState方式来实现

最后,类组件代码奉上,大家可以对比一下

import React, { Component } from 'react'

class State extends Component {
  state = {
      name: '乌鸦',
      age: 18
  }
  
  // 箭头函数写法 不然this指向会有问题
  setAge = ()=>{
      let { age } = this.state
      this.setState({
          age: ++age
      })
  }
  
  render() {
      let { name, age } = this.state
      return (<div>
          姓名:{ name }  <br />
          年龄:{ age }   <br />
          <button onClick={ this.setAge }>长一岁</button>
          
      </div>)
  }
}

结尾

2021年最后一天马上就要过去了,祝大家2022一切皆顺~~~