定制化开发React Hook - useState函数的详细解析

定制化开发的详细解析

定制化开发在上一篇文章中, 我用到useState定制化开发来让大家体验一下hooks函数

import { memo, useState } from "react"const Counter2 = memo(() => {  const [counter, setCounter] = useState(100)    return (    <div>      <h2>当前计数: {counter}</h2>      <button onClick={() => setCounter(counter - 1)}>-1</button>      <button onClick={() => setCounter(counter + 1)}>+1</button>    </div>  )})export default Counter2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

定制化开发那么接下来我们来先研定制化开发究一下上面核心的一段定制化开发代码代表什么意思

useState来自react,需要从react中导入,是一个hook函数, 定制化开发官方中也将它成为State Hook, 它与class组件里面的 this.state 提供的功能完全相同;

一般来说,在函数退出后变量就会”消失”,而 state 中的变量会被 React 保留。

useState只有一个参数: 接收一个初始化状态的值(设置初始值),在第一次组件被调用时使用来作为初始化值(如果不设置则默认为undefined);

useState的返回值: 返回一个数组,数组包含两个元素;

  • 元素一: 当前状态的值(第一次调用为初始化值);
  • 元素二: 是一个设置状态值变化的函数;
  • 不过我们如果总是使用索引来获取这两个元素总是不方便的, 因此在开发中我们通常是会对数组进行解构(当然要取什么名字是自定义的)
  • 例如上面代码: const [counter, setCounter] = useState(100)

上面代码中, 点击button按钮后,会完成两件事情:

调用元素二: setCounter,设置一个新的值;

组件重新渲染,并且根据新的值返回DOM结构;

相信通过上面的一个简单案例,你已经会喜欢上Hook的使用了

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

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

只能在函数组件的顶层调用 Hook。不能在循环语句、条件判断语句或者子函数中调用。

只能在 React 的函数组件自定义hook中调用 Hook。不能在其他 JavaScript 函数中调用。

Tip

Hook 指的类似于useState、这样的某一个函数

Hooks 是对这一类函数的统称

大家可能有疑惑: 为什么叫 useState 而不叫 createState?

“create” 可能不是很准确,因为 state 只在组件首次渲染 的时候才会被创建。

在下一次重新渲染时,就已经不是创建了, useState 会返回给我们当前所保存的state(如果每次都创建新的变量,它就不是 “state”了)。

这也是 Hook 的名字总是以 use 开头的一个原因, 因为你总是在使用而不是创建。

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

import React, { memo, useState } from 'react'const App = memo(() => {  // 简单数据  const [counter, setCounter] = useState(10)  const [message, setMessage] = useState("Hello World")  // 复杂数据  const [banners, setBanners] = useState(["aaa", "bbb", "ccc"])  const [infos, setInfos] = useState({    name: "chenyq",    age: 18,    height: 1.88  })    function changeNumber() {    setCounter(counter + 1)  }  return (    <div>      <h2>{counter}</h2>      <button onClick={changeNumber}>+1</button>      <h2>{message}</h2>      <h2>{banners}</h2>      <h2>{infos.name}-{infos.age}-{infos.height}</h2>    </div>  )})export default App
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发