首页 > 其他分享 >React hooks详解

React hooks详解

时间:2023-09-19 17:27:22浏览次数:34  
标签:count 状态 函数 hooks 初始值 React 详解 useState 组件

import React, { useEffect, useState } from 'react';

hook 是react 16.8的新增特性 ,他可以让你不在编写class的情况下shiystate以及react的特性 Hooks的出现,首先解决了以下问题:
  1. 告别了令人疑惑的生命周期
  2. 告别类组件中烦人的this
  3. 告别繁重的类组件,回归到了熟悉的函数组件
react 整个思想上面的转变,从“面向对象”的思想转为“函数式变成”,所以你会突然发现会多了一些新概念 比如:纯函数,副作用,柯里化,高阶函数等概念  

useState 

 

 1.基础使用

import { useState } from 'react'
function App() {
    // 参数:状态初始值比如,传入 0 表示该状态的初始值为 0
    // 返回值:数组,包含两个值:1 状态值(state) 2 修改该状态的函数(setState)
    const [count, setCount] = useState(0);
    //   修改count内容
    const modifyEvent = () => {
        setCount(count + 1)
    }
    return (
        <button onClick={() => modifyEvent()}>{count}</button>
    )
}
export default App

 

 2.状态的读取和修改执行流程与逻辑

  读取状态:该方式提供的状态,是函数内部的局部变量,可以在函数内的任意位置使用   修改状态:

    1.setCount是一个函数,参数表示最新的状态值

    2.调用该函数后,将使用新值替换旧值

    3.修改状态后,由于状态发生变化,会引起试图变化 注意

  事项:修改状态的时候,一定要使用新的状态替换旧的状态,不能直接修改旧的状态,尤其是引用类型

 

3. 组件的更新过程

  函数组件使用 useState hook 后的执行过程,以及状态值的变化

  1.组件第一次渲染

  • 从头开始执行该组件中的代码逻辑
  • 调用 useState(0) 将传入的参数作为状态初始值,即:0
  • 渲染组件,此时,获取到的状态 count 值为: 0

  2.组件第二次渲染

  • 点击按钮,调用 setCount(count + 1) 修改状态,因为状态发生改变,所以,该组件会重新渲染
  • 组件重新渲染时,会再次执行该组件中的代码逻辑
  • 再次调用 useState(0) ,此时 React 内部会拿到最新的状态值而非初始值,比如,该案例中最新的状态值为 1
  • 再次渲染组件,此时,获取到的状态 count 值为:1
注:useState 的初始值(参数)只会在组件第一次渲染时生效。也就是说,以后的每次渲染,useState 获取到都是最新的状态值,React 组件会记住每次最新的状态值 
import { useState } from 'react'
 
function App() {
  const [count, setCount] = useState(0)
  // 在这里可以进行打印
  console.log(count,'渲染了')
  return (
    <button onClick={() => { setCount(count + 1) }}>{count}</button>
  )
}
export default App

 4.使用规则

  1.useState 函数可以执行多次,每次执行互相独立,每调用一次为函数组件提供一个状态
function List(){
  // 以字符串为初始值
  const [name, setName] = useState('cp')
  // 以数组为初始值
  const [list,setList] = useState([])
}

  2.useState 注意事项

  • 只能出现在函数组件或者其他hook函数中
  • 能嵌套在if/for/其它函数中(react按照hooks的调用顺序识别每一个hook)

 

useEffect

            未完成待续。。。              

标签:count,状态,函数,hooks,初始值,React,详解,useState,组件
From: https://www.cnblogs.com/Allen-project/p/17712607.html

相关文章

  • React_doc
    React=》构建用户界面的JS库,用户界面是由按钮、文本和图像等小的单元内容构建。React可以组合成可重用、可嵌套的组件。组件案例functionProfile(){return(<imgsrc='https://i.xxx.com/test.jpg'alt=''/>)}exportdefaultfunctionGallery(){retur......
  • [转]C#Invoke和BeginInvoke应用详解
    最近,在研究Invoke的使用,但是真的是一头雾水,网上看了很多资料,感觉还是看不懂,因为对于入门级的小白,想像不出Invoke的应用场景,更谈不上如何用了?1、Invoke到底是什么?Invoke的本质只是一个方法,方法一定是要通过对象来调用的。一般来说,Invoke其实用法只有两种情况:Control的Invoke......
  • 框架分析(2)-React
    (框架分析(2)-React)专栏介绍link主要对目前市面上常见的框架进行分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步。ReactReact是由Facebook研发的一个用于构建用户界面的JavaScript库。它采用了组件化的开发方式,通过将界面拆分成......
  • 【MyAndroid】AndroidManifest.xml合并规则详解和注意事项
    APK或AndroidAppBundle文件只能包含一个AndroidManifest.xml文件,但AndroidStudio项目可以包含多个清单文件,这些清单文件由主源代码集、build变体和导入的库提供。因此,在构建应用时,Gradle构建系统会将所有清单文件合并成一个清单文件打包到应用中。清单合并工具遵循某些......
  • ipmitool 参数详解和常用命令列举
    ipmitool是一种可用在linux系统下的ipmi平台管理工具,它支持ipmi1.5规范(最新的规范为ipmi2.0),通过它可以实现获取传感器的信息、显示系统日志内容、网络远程开关机等功能。 [root@localhost~]#ipmitool-hipmitoolversion1.8.18usage:ipmitool[options...]<co......
  • SQL update select结合语句详解及应用
    SQLupdateselect结合语句详解及应用 QLupdateselect语句最常用的update语法是:12UPDATETABLE_NAMESETcolumn_name1=VALUEWHRERcolumn_name2=VALUE如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦第一,要sel......
  • MySQL篇:第八章_详解TCL语言
    事务一、含义事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行二、特点(ACID)A原子性:一个事务是不可再分割的整体,要么都执行要么都不执行C一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态I隔离性:一个事务不受其他事务的干扰,多个......
  • Python变量:创建、类型、命名规则和作用域详解
    变量变量是用于存储数据值的容器。创建变量Python没有用于声明变量的命令。变量在您第一次为其分配值时被创建。示例x=5y="John"print(x)print(y)变量不需要声明为特定类型,并且甚至在设置后可以更改类型。示例x=4#x的类型为intx="Sally"#现在x的......
  • 【愚公系列】2023年09月 WPF控件专题 DataGrid控件详解
    (文章目录)前言WPF控件是WindowsPresentationFoundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见......
  • 单例模式详解
    饿汉单例模式packagecom.std.www.singletonmode;importjava.util.UUID;publicclassScpD{privatefinalstaticScpDscpD=newScpD();publicstaticScpDgetScpD(){returnscpD;}}类一经创建就会给对象分配内存,这种方式会造成不必要的内......