千家信息网

React Hook中如何使用State Hook

发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,今天小编给大家分享一下React Hook中如何使用State Hook的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有
千家信息网最后更新 2025年02月09日React Hook中如何使用State Hook

今天小编给大家分享一下React Hook中如何使用State Hook的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    Hook 简介章节中使用下面的例子介绍了 Hook:

    import React, { useState, useEffect } from 'react';function Example() {  const [count, setCount] = useState(0);  // Similar to componentDidMount and componentDidUpdate:  useEffect(() => {    // Update the document title using the browser API    document.title = `You clicked ${count} times`;  });  return (    

    You clicked {count} times

    );}

    我们将通过将这段代码与一个等价的 class 示例进行比较来开始学习 Hook。

    等价的 class 示例

    如果你之前在 React 中使用过 class,这段代码看起来应该很熟悉:

    class Example extends React.Component {  constructor(props) {    super(props);    this.state = {      count: 0    };  }  render() {    return (      

    You clicked {this.state.count} times

    ); }}

    state 初始值为 { count: 0 } ,当用户点击按钮后,我们通过调用 this.setState() 来增加 state.count。整个章节中都将使用该 class 的代码片段做示例。

    Hook 和函数组件

    复习一下, React 的函数组件是这样的:

    const Example = (props) => {  // 你可以在这使用 Hook  return 
    ;}

    或是这样:

    function Example(props) {  // 你可以在这使用 Hook  return 
    ;}

    你之前可能把它们叫做"无状态组件"。但现在我们为它们引入了使用 React state 的能力,所以我们更喜欢叫它"函数组件"。

    Hook 在 class 内部是不起作用的。但你可以使用它们来取代 class

    Hook 是什么?

    在新示例中,首先引入 React 中 useState 的 Hook

    import React, { useState } from 'react';function Example() {  // ...}
    • Hook 是什么? Hook 是一个特殊的函数,它可以让你"钩入" React 的特性。例如,useState 是允许你在 React 函数组件中添加 state 的 Hook。稍后我们将学习其他 Hook。

    • 什么时候我会用 Hook? 如果你在编写函数组件并意识到需要向其添加一些 state,以前的做法是必须将其转化为 class。现在你可以在现有的函数组件中使用 Hook。

    声明 State 变量

    class 中,我们通过在构造函数中设置 this.state{ count: 0 } 来初始化 count state0

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

    在函数组件中,我们没有 this,所以我们不能分配或读取 this.state。我们直接在组件中调用 useState Hook:

    import React, { useState } from 'react';function Example() {  // 声明一个叫 "count" 的 state 变量  const [count, setCount] = useState(0);
    • 调用 useState 方法的时候做了什么? 它定义一个 "state 变量"。我们的变量叫 count, 但是我们可以叫他任何名字,比如 banana。这是一种在函数调用时保存变量的方式 —— useState 是一种新方法,它与 class 里面的 this.state 提供的功能完全相同。一般来说,在函数退出后变量就会"消失",而 state 中的变量会被 React 保留。

    • useState 需要哪些参数? useState() 方法里面唯一的参数就是初始 state。不同于 class 的是,我们可以按照需要使用数字或字符串对其进行赋值,而不一定是对象。在示例中,只需使用数字来记录用户点击次数,所以我们传了 0 作为变量的初始 state。(如果我们想要在 state 中存储两个不同的变量,只需调用 useState() 两次即可。)

    • useState 方法的返回值是什么? 返回值为:当前 state 以及更新 state 的函数。这就是我们写 const [count, setCount] = useState() 的原因。这与 class 里面 this.state.countthis.setState 类似,唯一区别就是你需要成对的获取它们。如果你不熟悉我们使用的语法,我们会在本章节的底部介绍它。

    既然我们知道了 useState 的作用,我们的示例应该更容易理解了:

    import React, { useState } from 'react';function Example() {  // 声明一个叫 "count" 的 state 变量  const [count, setCount] = useState(0);

    我们声明了一个叫 countstate 变量,然后把它设为 0。React 会在重复渲染时记住它当前的值,并且提供最新的值给我们的函数。我们可以通过调用 setCount 来更新当前的 count

    注意

    你可能想知道:为什么叫 useState 而不叫 createState?

    "Create" 可能不是很准确,因为 state 只在组件首次渲染的时候被创建。在下一次重新渲染时,useState 返回给我们当前的 state。否则它就不是 state 了!这也是 Hook 的名字总是以 use 开头的一个原因。我们将在后面的 Hook 规则中了解原因。

    读取 State

    当我们想在 class 中显示当前的 count,我们读取 this.state.count

      

    You clicked {this.state.count} times

    在函数中,我们可以直接用 count:

      

    You clicked {count} times

    更新 State

    class 中,我们需要调用 this.setState() 来更新 count 值:

     

    在函数中,我们已经有了 setCountcount 变量,所以我们不需要 this:

      

    小结

    现在让我们来仔细回顾一下学到的知识,看下我们是否真正理解了。

    import React, { useState } from 'react';function Example() {        const [count, setCount] = useState(0);        return (      

    You clicked {count} times

    );}
    • 第一行 - 引入React 中的 useState Hook。它让我们在函数组件中存储内部 state

    • 第四行 - 在 Example 组件内部,我们通过调用 useState Hook 声明了一个新的 state 变量。它返回一对值给到我们命名的变量上。我们把变量命名为 count,因为它存储的是点击次数。我们通过传 0 作为 useState 唯一的参数来将其初始化为 0。第二个返回的值本身就是一个函数。它让我们可以更新 count 的值,所以我们叫它 setCount

    • 第九行 - 当用户点击按钮后,我们传递一个新的值给 setCount。React 会重新渲染 Example 组件,并把最新的 count 传给它。

    提示:方括号有什么用?

    你可能注意到我们用方括号定义了一个 state 变量

    const [count, setCount] = useState(0);

    等号左边名字并不是 React API 的部分,你可以自己取名字:

    const [fruit, setFruit] = useState('banana');

    这种 JavaScript 语法叫数组解构。它意味着我们同时创建了 fruitsetFruit 两个变量,fruit 的值为 useState 返回的第一个值,setFruit 是返回的第二个值。它等价于下面的代码:

      var fruitStateVariable = useState('banana'); // 返回一个有两个元素的数组  var fruit = fruitStateVariable[0]; // 数组里的第一个值  var setFruit = fruitStateVariable[1]; // 数组里的第二个值

    当我们使用 useState 定义 state 变量时候,它返回一个有两个值的数组。第一个值是当前的 state,第二个值是更新 state 的函数。使用 [0][1] 来访问有点令人困惑,因为它们有特定的含义。这就是我们使用数组解构的原因。

    提示:使用多个 state 变量

    state 变量声明为一对 [something, setSomething] 也很方便,因为如果我们想使用多个 state 变量,它允许我们给不同的 state 变量取不同的名称:

    function ExampleWithManyStates() {  // 声明多个 state 变量  const [age, setAge] = useState(42);  const [fruit, setFruit] = useState('banana');  const [todos, setTodos] = useState([{ text: '学习 Hook' }]);

    在以上组件中,我们有局部变量 agefruittodos,并且我们可以单独更新它们:

      function handleOrangeClick() {    // 和 this.setState({ fruit: 'orange' }) 类似    setFruit('orange');  }

    不必使用多个 state 变量。State 变量可以很好地存储对象和数组,因此,你仍然可以将相关数据分为一组。然而,不像 class 中的 this.setState,更新 state 变量总是替换它而不是合并它。

    以上就是"React Hook中如何使用State Hook"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

    变量 函数 组件 更新 数组 就是 示例 知识 不同 两个 代码 原因 多个 方法 时候 篇文章 面的 存储 学习 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国工商银行软件开发中心北京研发部待遇 清楚微信所以数据库 用友erp数据库连接失败 计算机软件开发属于甚么行业 力控软件如何导入关系数据库表 数据库约束主键是什么 站群服务器防止假墙 数据库应用简称 云计算网络安全管理规范和技术 我的世界服务器号怎么给别人 非结构化数据库在财务报表 杭州中移互联网科技有限公司 企业用大带宽服务器 网络技术学生特长 可能造成数据库丢失 数据库与大数据的区别 网络安全教育2 服务器是否支持AVX指令集 纯音乐铃声软件开发 软件开发与技术开发一样吗 战意有哪几个服务器 东南大学网络安全学院考研科目 搬家app软件开发 伽玛网络技术有限公司 用友v6应用服务器设置 服务器数据库查看命令大全 数据库与大数据的区别 英雄联盟高手服务器排名 魔兽怀旧服服务器如何删除好友 孩子的网络安全教育
    0