Hook 学习系列(一) —— State Hook

2023-11-11


use 开头的函数被称为 Hook

React HookReact 16.8 引入的新特性。它用在函数组件中,允许开发者不使用 class 的情况下,使用状态 state 和其他特性。

Hook,使开发者可以在函数组件中使用状态,在无需修改组件结构的情况下复用状态逻辑。

Hook 是一些可以在函数组件里“钩入” React state 及生命周期等特性的函数,在编写函数组件需要向其添加一些 state 时,就可以使用 Hook。本质上就是一类特殊的函数,为函数型组件(function component)注入一些特殊的功能。
Hook 不能在 class 组件中使用。

最常见的 Hooks,比如 setStateuseEffect

State Hook

useStateReact 提供的一个内置 Hook。在函数组件里调用useState可以给组件添加一些内部 state

React 在重复渲染时会保留这个 state

useState 返回一对值:

(1)当前状态
(2)更新它的函数

在事件处理函数中或其他一些地方调用这个函数,类似于 class 类组件的 this.setState,但是这个更新函数不会把新的 state 和旧的 state 进行合并。

useState 唯一的参数就是初始 state

上面的例子中,计数器从零开始,初始 state0

这里的 state 不一定是一个对象,它不同于 this.state,这个初始 state 参数只有在第一次渲染时会被用到。

Example.js

import React, { useState } from 'react' // 引入 React 中的 useState Hook,在函数组件中存储内部 state。
function Example () {
  // 声明一个叫 “count” 的 state 变量
  const [count, setCount] = useState(0) 
  // 调用 useState Hook 声明一个新的 state 变量,它返回一对值给到我们命名的变量上。变量命名为 count,存储点击次数。传 0 作为 useState 唯一的参数来将其初始化为 0。第二个返回的值是一个函数 setCount,通过它来更新 count 的值。
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}> 
      // 点击按钮,触发点击事件,传递一个新的值给 setCount,React 重新渲染 Example 组件,并把最新的 count 传给它。
        Click me
      </button>
    </div>
  );
}
export default Example

App.js 中引用这个组件:

// import logo from './assets/images/logo.svg';
import './assets/css/App.css';
import Home from './components/Home'
import Example from './components/Example';

function App () {
  return (
    <div className="App">
      <header className="App-header">
        {/* <img src={logo} className="App-logo" alt="logo" /> */}
        <p>
          文字 <code>src/App.js</code> Hello World!.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          https://reactjs.org
        </a>
      </header>
      <Home />
      <Example />
    </div>
  );
}

export default App;

上面的例子等同于:

import React, { Component } from 'react'
class Example extends Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }

  render () {
    return (
      <div>
        <p>You clicked {this.state.count} times</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Click me
        </button>
      </div>
    );
  }
}
export default Example

页面效果:
请添加图片描述

使用多个 state 变量

import React, { useState } from 'react'
function Example () {
  const [count, setCount] = useState(0)
  const [age, setAge] = useState(42)
  const [fruit, setFruit] = useState('banana');
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>

      <p>setAge: {age} </p>
      <button onClick={() => setAge(age + 3)}>
        Click me
      </button>

      <p>setFruit:{fruit} </p>
      <button onClick={() => setFruit('apple')}>
        Click me
      </button>
    </div>
  )
}
export default Example

页面效果如下:
在这里插入图片描述

注意:Hook 比普通函数更为严格。只能在组件(或其他 Hook)的 顶层 调用 Hook。如果想在一个条件或循环中使用 useState,需要提取一个新的组件并在组件内部使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hook 学习系列(一) —— State Hook 的相关文章

随机推荐

  • vulhub安装时的问题

    在安装vulhub时 出现cannot import transport或者是无法导入其他的模块 从网上找到的方法都尝试之后均不行 这个文件夹明明存在 但是他就是说找不到 解决方法 在使用pip进行安装的时候 网上找的他们都是直接默认安装的
  • python __doc__方法

    doc 方法是python的内置方法之一 该方法通常会输出指定对象中的注释部分 NB 注意 后面的部分表示输出结果 代码如下 class Debug This is a class for debugging def init self T
  • ESP32-C3入门教程 基础篇(一、ADC采样)

    经过前面的折腾 设计好了自己的测试开发板 搭建好了开发环境 然后正式开始进行功能测试了 测试顺序先从简单的开始吧 一步一步来 目录 前言 1 ADC采样示例测试 1 1 DMA连续采样 1 2 单次采样 1 3 测试源码 2 ESP32 C
  • linux之perf(2)list事件

    Linux之perf 2 list事件 Author Onceday Date 2023年9月3日 漫漫长路 才刚刚开始 参考文档 Tutorial Perf Wiki kernel org perf list 1 Linux manual
  • DevOps理念:开发与运维的融合

    在现代软件开发领域 DevOps 不仅仅是一个流行的词汇 更是一种文化 一种哲学和一种方法论 DevOps 的核心理念是通过开发和运维之间的紧密合作 实现快速交付 高质量和持续创新 本文将深入探讨 DevOps 文化的重要性 原则以及如何在
  • C语言 - 整形在内存中的存储方式

    一 以补码的形式存储在内存当中 1 有符号型的整数二进制首位0表示正 1表示负数 2 正数的原码 反码 补码都相同 如 3 负数的反码为原码的首位数不变 其他位按位取反所得 补码为反码 1 如 当然 要得到负数的原码 可以反过来 即补码 1
  • 基于SpringCloud的Microservices架构实战案例-在线API管理

    simplemall项目前几篇回顾 1基于SpringCloud的Microservices架构实战案例 序篇 2基于SpringCloud的Microservices架构实战案例 架构拆解 3基于SpringCloud的Microserv
  • C语言读取load格式文件,求指导,如何用c语言实现读取*.raw格式图像

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这个程序是读取jpg图像的 后续加上jpg图像打开和存放 include include include include include define SOI 0xD8 文件头 define E
  • 【Redis篇】Redis缓存之双写一致性

    1 引言 redis做为缓存 mysql的数据如何与redis进行同步呢 本质上问的就是双写一致性 注意 回答这个问题前一定要结合自己的业务背景 分两种情况 一个是你的业务一致性要求高 另一个是你的业务允许延迟一致 2 双写一致性 2 1
  • 大数据技术之数据质量管理

    一 数据质量概述 1 数据质量简介 数据质量的高低代表了该数据满足数据消费者期望的程度 这种程度基于他们对数据的使用预期 只有达到数据的使用预期才能给予管理层正确的决策参考 数据质量管理作为数据仓库的一个重要模块 主要可以分为数据的健康标准
  • 前端实现导出excel表格(单行表头)

    需求 实现勾选行导出为表格 一 安装插件 npm install save file saver xlsx 运行项目报如下警告的话 运行npm install xlsx 0 16 0 save 来降低版本号 最初我安装的版本号是0 18 1
  • android天气预报开题报告,开题报告-基于Android手机移动天气预报系统.doc

    毕业设计 论文 开题报告 题目 基于Android手机移动天气预报系统 一 选题依据 目的和意义 天气预报就是对未来时期内天气变化的预先估计和报告 它是根据大气科学的基本理论和技术对每一地区的未来天气做出分析和预测 这是大气科学为国民经济建
  • 比尔盖茨现身西雅图SAS 2007“治疗失眠”

    结束了4月18 21号的访华活动 比尔盖茨又现身在了西雅图5月8号开始的为时两天的第八届微软战略合作伙伴高峰会议上 Strategic Account Summit Conference 这次会议请来了众多重量级的大腕嘉宾 包括负责微软网络
  • Springboot 接口方式硬通知实现ConfigurationProperties 、@Value 动态刷新

    前言 看到这个文章标题 也许有的看官就觉得很多余 因为Nacos 可以设置 NacosValue value XXX autoRefreshed true 实现动态刷新 又因为cloud config的 RefreshScope 实现动态刷
  • 基于Warshall算法的连通图及欧拉图判定方法

    1736年欧拉解决了哥尼斯堡七桥问题 他在这一具体问题的基础上进一步研究 最终找到了一个简便的原则可以鉴别一个图 多重图 能否一笔画成 本文中 笔者使用布尔矩阵来存储一个无向图 并结合集合论中 传递闭包 的概念给出了一种欧拉图的判定方法 本
  • (系统的推送)友盟推送

    今年再次负责这个模块 最大亮点就是支持了系统的推送 也就是说你设备退出后台应用了 发推送还可以收到推送 https info umeng com detail id 169 cateId 1 测试方案 选择测试模式 可以无限制的发送数量 公
  • Pytorch深度学习入门与实战三——循环神经网络

    1 常见的循环神经网络 RNN LSTM GRU RNN torch nn RNN 单纯的RNN会出现随着地柜次数的增加 权重指数级爆炸或小时的问题 从而难以捕捉长时间的关联 导致RNN训练是收敛困难 LSTM 引入门的机制 使网络有更强的
  • 草料二维码统计扫描信息

    目录 1 注册账号并登陆 2 创建活码 2 1 点击活码后编辑 2 1 1 新建 gt 空白建码 也可以选择模板 3 查看统计信息 3 1 扫描创建的活码 3 2 数据分析 gt 扫描量统计 需求说明 由于服务推广需要统计扫码人数 所以使用
  • 相似图像的检测方法

    背景 以图搜图 是日常生活中我们经常会用到 例如在选购一款商品时 想要对比价格 往往会在各个购物app上通过搜图的形式来看同一款产品的价格 当你碰到某种不认识的植物时 也可以通过以图搜图的方式来获取该种植物的名称 而这些功能大都是通过计算图
  • Hook 学习系列(一) —— State Hook

    React Hook State Hook 使用多个 state 变量 以 use 开头的函数被称为 Hook React Hook 是 React 16 8 引入的新特性 它用在函数组件中 允许开发者不使用 class 的情况下 使用状态