关于javascript:hooks-系列二useState

29次阅读

共计 3708 个字符,预计需要花费 10 分钟才能阅读完成。

快来退出咱们吧!

“ 小和山的菜鸟们 ”,为前端开发者提供技术相干资讯以及系列根底文章。为更好的用户体验,请您移至咱们官网小和山的菜鸟们 (https://xhs-rookies.com/) 进行学习,及时获取最新文章。

“Code tailor”,如果您对咱们文章感兴趣、或是想提一些倡议,微信关注 “小和山的菜鸟们” 公众号,与咱们取的分割,您也能够在微信上观看咱们的文章。每一个倡议或是同意都是对咱们极大的激励!

咱们为什么要学 hooks

前言

这篇文章,咱们次要目标是理解一下 状态钩子(useState) 的应用.

useState

定义

useState() 用于为函数组件引入状态。纯函数不能有状态,所以应用钩子来引入状态。

如何应用

useState 的应用如上面的语句。

const [count, setCount] = useState(defaultValue) // 假如 defaultValue 为 0
let countVariable = useState(0)
let count = countVariable[0]
let setCount = countVariable[1]
setCount(count + 1) // count 1
setCount(10) // count 10
const [name, setName] = useState('xhs')
const [age, setAge] = useState(18)
const [dowhat, setDowhat] = useState({thing: 'Learn Hooks'})
setName('xxxxxxxhs')
setAge(20)
setDowhat({thing: 'Learn Nothing'})
import React, {Component} from 'react'
import './App.css'
​
export class App extends Component {constructor(props) {super(props)
    this.state = {count: 0,}
  }
  handleWithAddOne() {this.setState({ count: this.state.count + 1})
  }
  handleWithAddTwo() {this.setState({ count: this.state.count + 2})
  }
  handleWithDecreaseOne() {this.setState({ count: this.state.count - 1})
  }
  render() {const { count} = this.state
    return (
      <div className="app">
        <p>Now,the number is {count}.</p>
        <div className="three-btn">
          {/* 点击之后 count + 1 */}
          <button className="button add" onClick={() => this.handleWithAddOne()}>
            Click it, the number will add 1
          </button>
          {/* 点击之后 count + 2 */}
          <button className="button add" onClick={() => this.handleWithAddTwo()}>
            Click it, the number will add 2
          </button>
          {/* 点击之后 count - 1 */}
          <button className="button decrease" onClick={() => this.handleWithDecreaseOne()}>
            CLick it, the num will decrease 1
          </button>
        </div>
      </div>
    )
  }
}
.app {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.three-btn {
  display: flex;
  flex-direction: column;
}
​
.button {
  height: 40px;
  margin: 12px 0px;
  color: white;
  border: none;
  border-radius: 10px;
}
.add {background-color: #1890ff;}
​
.decrease {background-color: red;}

应用多个 useState 就能够定义多个 state 变量。

useState 返回的是一个数组,个别间接应用解构赋值取出两个值,state 以及 批改 state 的函数。这两个值是须要成对获取的。

useState 函数,只须要传入一个惟一参数,作为默认值,初始化 state

当初,让咱们来总结一下 useState

小结

简略来讲,useState 就是为函数组件提供了 React state 的性能,当初就能够称为 函数组件 了,这之前,叫做 无状态组件

就这样,咱们就胜利应用了 useState,运行的后果与下面类组件的运行后果是雷同的,代码的简单程序被大幅度的升高了,相比于类组件,可能这样的形式更容易让人承受。

import './App.css' // 导入 css 款式,款式同上
import {useState} from 'react'

function App() {const [count, setCount] = useState(0)
  return (
    <div className="app">
      <p>Now,the number is {count}.</p>
      <div className="three-btn">
        <button className="button add" onClick={() => setCount(count + 1)}>
          Click it, the number will add 1
        </button>
        <button className="button add" onClick={() => setCount(count + 2)}>
          Click it, the number will add 2
        </button>
        <button className="button decrease" onClick={() => setCount(count - 1)}>
          CLick it, the num will decrease 1
        </button>
      </div>
    </div>
  )
}

咱们来实现需要:

咱们将 state 的值,应用 useState 进行创立,用 setCount 进行批改 count 的值。

应用 useState 重写案例

上面,咱们一起来看看 useState 是怎么实现的。

从下面咱们能够看到,尽管成果曾经达到是咱们冀望,然而能够很显著的感触到它的代码是很 ” 重 ” 的,在咱们实在的我的项目开发中,React App 都是由多个类,依照层级,一层层组成的,复杂程度可想而知。这时候,如果咱们在退出 Redux,那会变得更加简单繁琐。

这是运行之后的效果图

css 的款式

首先,咱们来看一下,在类组件中,咱们应用 state 的状况,咱们须要在 state 中申明变量 count,并赋予默认值 0,而批改的形式只有通过 this.setState()count 进行批改。

类组件应用 this.state 实现

我想要有一个简略的计数器,须要有 +1+2-1 三个操作,能够刷新页面中当初的 numer 值。

当初你以及对 useState 有了肯定的理解,那咱们就来实现一个需要:

比照类组件

如何批改这些变量呢?跟下面一样,间接调用各自的 set 办法就能够了。

上述的语句只能申明一个 state 变量,如果你想要申明多个 state 变量,只须要应用多个 useState 就能够了。

应用多个 state 变量

首先执行第一次 setCount 之后,值从 0 -> 1,第二次执行的时候,间接传入了一个 10,而它的值就间接从 1 -> 10 所以 count 的值更新为 10

批改 state 的值,只须要间接应用 setCount 办法就能够进行更改。传入的值会间接返回给 count 值并更新。如上面两个。

批改 state

也就是说,应用 useState 返回的是一个数组,它等价于上面的代码:

返回的是一个数组,然而都会被应用 JavaScript 语法的数组解构 成两个值,以后 state批改 state 的函数。这与 class 外面 this.state.countthis.setState 相似,惟一区别就是你须要成对的获取它们。

useState 返回值

它定义了一个名为 countstate 变量,它与 class 外面的 this.state 提供的性能完全相同。一般来说,在函数退出后变量就会”隐没”,而 state 中的变量会被 React 保留。

useState 做了什么

useState 须要传入的惟一参数就是初始化 state,咱们能够传各种类型的值,比方:数字、字符、数组、对象等。

useState 须要的参数

下节预报

在下节中,咱们将为大家介绍 useEffect,敬请期待!

正文完
 0