hook xposed 自定义类_【开始学习React Hook(1)】Hook之useState

react hook是react推出的一种特殊函数。这些函数可以让你在不创建react class的情况下依然可以使用react的一些特性(诸如目前react的钩子函数拥有的所有特性)。

最常用的hook有useState, useEffect, 日常开发使用这两个就足够了。如果再懂点useReduer, useCallback, useMemo, useRef, useImperativeHandle, useLayoutEffect, useDebugValue ,自定义hook,就再好不过了。


useState是什么?

它允许我们在react函数组件里使用state,可以完全替代this.state的所有特性。不过,hook只可以用在函数组件里,在类组件里不生效哦

怎么用useState?

  1. 引入useState
Import React, { useState } from ‘react’

2. 在函数组件里声明state属性

const [ xx, setXxx ] = useState(xx的初始值);

useState方法接受的唯一参数,就是xx的初始值。

3. 在函数组件里想要读取state属性

函数组件里没有this,读取state属性是直接读取xx

4. 在函数组件里想更新state属性

直接使用setXxx( xx的更新值) 即可更新xx的值

实例操作

场景:

某个文档文字过长,点击“查看更多”按钮文档会全部展示出来,点击“收起”按钮,文档会收起一部分。

实现思路:

定义一个state属性fold,类型为boolean,当展示”收起”按钮时,fold值为true;点击可切换成“查看更多”,fold值也会变为false;

实现代码:

使用react 类组件实现如下:

import React, {Component} from 'react';class HookExample extends Component {constructor(props){super(props);this.state = {fold: true,}}render() {const { fold } = this.state;return (<div className="hook-example"><article><header><h2>Life</h2></header><section className={fold ? 'fold' : 'unfold'}><p>  If life is a river, it is the most exciting section.</p><p>  Flowing a trickle of childhood, life began to restlessness, personality spray, a piece after piece of Pentium the melody of youth。It is surging, it's always a time of the wild and intractable, slap embankment, heaving ship of life。</p></section></article><span onClick={()=>{this.setState({fold: !fold})}}>{fold ? '查看更多' : '收起'}</span></div>);}
}export default HookExample;

使用hook函数组件实现如下:

import React, {useState} from 'react';
function HookExample(){const [fold, setFold] = useState(true);return (<div className="hook-example"><article><header><h2>Life</h2></header><section className={fold ? 'fold' : 'unfold'}><p> If life is a river, it is the most exciting  section.</p><p> Flowing a trickle of childhood, life began to  restlessness,personality spray, a piece after  piece of  Pentium the melody of youth。 It is  surging, it's always  a time of the wild and  intractable, slap embankment, heaving ship of  life。</p></section></article><span onClick={()=>{setFold(!fold)}}>{fold ? '查看更 多' : '收起'}</span></div>);
}
export default HookExample;

页面效果:

55863fee37373e7b5addf891c69a08a6.gif

实现步骤详解:

第一步:创建组件,声明state属性

使用react类组件可以这样实现:

import React, {Component} from 'react';
class HookExample extends Component {
constructor(props){super(props);this.state = {fold: true,}
}

而用useState,只需:

import React, {useState} from 'react';
function HookExample(){
const [fold, setFold] = useState(true);

useState只接收一个参数,就是该state属性的初始值。它会返回一个数组,里面包含两个值,通过数组解构的方式将第一个值赋给用户定义的state属性(即fold),第二个值为state属性的更新函数,赋给用户定义的属性更新函数(setFold)。

const [ fold, setFold ] = useState(true) 
// 等同于
const result = useState(true);
const fold = result[0];
const setFold = result[1];

第二步:读取state属性

在react 类组件里,我们需要这样:

const { fold } = this.state;
<section className={fold ? 'fold' : 'unfold'}>

在使用了hook的函数组件里,我们只需:

<section className={fold ? 'fold' : 'unfold'}>

类组件里,我们需要通过this.state读取到fold的值。而在函数组件里,直接使用fold即可。

第三步: 更新state属性

react组件里,如下:

<span onClick={()=>{ this.setState({fold: !fold}) }}>{fold ? '查看更多' : '收起'}</span>

在函数组件里,如下:

<span onClick={()=>{setFold(!fold)}}>{fold ? '查看更多' : '收起'}</span>

在类组件里,通过调用setState更新fold,更新后的fold会与当前的state对象进行合并。

而在函数组件里,直接调用第一步声明的更新函数setFold即可更新fold的值,fold值更新后,react会重新渲染HookExample组件,并把最新的fold值传给它。

使用小提示

在实际开发中,我们可能需要多个state属性。你可以写多个useState

const [A1, setA1] = useState('');
const [A2, setA2] = useState(true);

如果state属性直接有业务关联,那么可以把这几个state属性合在一起,用一个useState即可。

const [A, setA] = useState({A1: ‘’,A2: true
});

与react类组件不同的是,当我们更新属性A时,会完全替代之前的A值,而不是merge原来的A值。


恭喜你学会了useState,接下来还有useEffect等一系列教程等着你,要加油哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql004子查询.相关子查询.不相关子查询

子查询&#xff1a;相关子查询&#xff0c;不相关子查询 -- 不相关子查询 -- 一条SQL语句含有多个select,先执行子查询&#xff0c;在执行外部查询。子查询可以独立运行&#xff0c;成为不相关子查询。 -- 需求1&#xff1a;查询所有比姓名为“CLARK”工资高的员工的信息。 …

文件无刷新上传(swfUpload与uploadify)

文件无刷新上传并获取保存到服务器端的路径 遇到上传文件的问题&#xff0c;结合之前用到过的swfUpload&#xff0c;又找了一个无刷新上传文件的jquery插件uploadify&#xff0c;写篇博客记录一下分别介绍这两个插件的实现方法 swfUpload 导入swfUpload的开发包 添加js引用&am…

ediplus 复制编辑一列_vi编辑器的使用详解

一个编辑器具备的功能一个编辑器(例如Windows中的记事本)具备的功能&#xff1a;打开文件、新建文件、保存文件光标移动文本编辑(多行间|多列间)复制、粘贴、删除查找和替换vi编辑器的环境设置为了更方便的使用vi编辑器&#xff0c;我们需要先对vi编辑器进行一些配置。打开虚拟…

myjdbc链接数据库.增删改查

-- 创建user表 CREATE TABLE user( uid int PRIMARY KEY auto_increment, uname VARCHAR(55), pwd VARCHAR(55), realName VARCHAR(55) ) SELECT * FROM user; Jdbc增删改查 package myjdbc; import java.sql.Connection; import java.sql.DriverManager; import java.…

JAVA中通过时间格式来生成唯一的文件名

有时候我们需要截图&#xff0c;在要截图时&#xff0c;有人用到了时间格式&#xff0c;但是时间格式中的:在文件名称中是不被允许的字符&#xff0c;所以就会报错&#xff0c;如何生成唯一的时间文件名&#xff1a; package com.demo;import java.text.ParseException; import…

python返回字符串长度的函数_Python如何查找字符串的长度?(代码示例)

在Python中字符串是Unicode代码点的不可变序列。给定一个字符串&#xff0c;我们如何查找它的长度&#xff1f;本篇文章就来给大家介绍在Python中查找字符串长度的四种方法&#xff0c;希望对大家有所帮助。【相关视频教程推荐&#xff1a;Python视频教程】方法一&#xff1a;使…

K-means算法和矢量量化

语音信号的数字处理课程作业——矢量量化。这里采用了K-means算法&#xff0c;即假设量化种类是已知的&#xff0c;当然也可以采用LBG算法等&#xff0c;不过K-means比较简单。矢量是二维的&#xff0c;可以在平面上清楚的表示出来。 1. 算法描述 本次实验选择了K-means算法对数…

docker 主进程 日志_运维笔记--docker高效查看后台日志

场景描述&#xff1a;应用程序运行在 Docker环境中&#xff0c;经常使用的查看后台日志的命令是&#xff1a;docker attach 容器名该命令优点&#xff1a;实时输出&#xff1b;不足之处&#xff1a;日志大量输出的时候&#xff0c;屏幕一闪而过&#xff0c;不便于调试&#xff…

jdbc.properties文件

drivercom.mysql.cj.jdbc.Driver (//主机&#xff1a;端口号、数据库名)urljdbc:mysql://localhost:3306/mydb?useSSLfalse&useUnicodetrue&characterEncodingutf8&serverTimezoneAsia/Shanghaiusername(链接的用户)passwd(密码)

ifix如何设画面大小_如何让你的视频又小又清晰?视频编码输出软件来了

如何让视频保持清晰同时又让其体积尽可能的小&#xff1f;这是很多小伙伴们都很头疼的问题而且很多时候我们需要会在微信或者朋友圈等社交平台上传我们的作品但它们对视频大小有着比较严格的控制所以蜜蜂菌就为大家带来了视频压缩神器小丸工具箱帮助你轻松压缩出又小又清晰的视…

智能集群理论优化控制_探索群体智能的奥妙——ROB-MAS多智能体协作

人类对未知领域总是充满好奇和敬畏。因为好奇&#xff0c;所以不断探索&#xff0c;因为敬畏&#xff0c;所以小心谨慎。谈到人工智能&#xff0c;已经不仅仅是停留在智能手机、家用电器这个层次&#xff0c;要知道&#xff0c;人工智能的作用&#xff0c;不仅仅是为了方便生活…

mybatis.xml文件

mybatis.xml <?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>&l…

note同步不及时 one_朱海舟回应锤子便签同步不及时:工程师已经解决

集微网消息(文/数码控)&#xff0c;有不少网友反映自己用的锤子便签没法及时同步数据&#xff0c;对此锤子科技产品经理朱海舟回应称工程师已经把该问题解决&#xff0c;用户只需更新APP即可。至于部分安卓用户无法同步锤子便签数据的问题&#xff0c;也很好解决&#xff0c;只…

NEC学习 ---- 模块 - 带点文字链接列表

带点文字链接列表, 实现的效果是, 调整字体大小, 点的位置不会跟着变动. HTML如下: <div class"container"><div class"m-list2"><ul><li><i class"dot"></i><a href"#">带点文字链接列表…

shell复习笔记----命令与参数

shell最基本的工作就是执行命令. 每键入一道命令, shell 就会执行. $cd work;ls -l whizprog.c 首先:格式很简单,以空白(Space 键或者 Tab键)隔开命令行中的各个组成部分. 其次,命令名称是命令行的第一个项目.通常后面会跟着选项(option),任何额外的参数(argument)都会放在选项…

enkey java_近期的Java项目(前端)

1.项目名&#xff1a;栏目选择框(前端)2.项目源码--话不多说&#xff0c;直接附上源码吧&#xff0c;感受会更直观一些package java项目;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import javax.swing.ButtonGroup;import javax.swi…

__doPostBack简单的使用方法

这里需要提一下的是&#xff0c;asp.net编程提供了服务端控件和客户端控件的说法&#xff0c;其实还是脱离不了HTML的本质&#xff0c;客户端和服务端需要交互必须要提交&#xff0c;提交有两种方式get和post,get就是通过向服务端发送连接地址&#xff0c;服务端通过地址的参数…

单时隙灵敏度有什么影响_英国大学设计出低价开源单分子显微镜

低价单分子显微镜英国谢菲尔德大学的一个科学家和学生团队设计并建造了一台专业单分子显微镜&#xff0c;他们向外界分享了建造方法&#xff0c;以帮助世界各地的许多实验室使用这种设备。这台名为smfBox的显微镜能够进行单分子测量&#xff0c;让科学家一次只看一个分子&#…

安装TokuDB引擎

前言&#xff1a;TokuDB 是一个高性能、支持事务处理的 MySQL 和 MariaDB 的存储引擎。TokuDB 的主要特点是高压缩比&#xff0c;高 INSERT 性能&#xff0c;支持大多数在线修改索引、添加字段,非常适合日志型应用场景&#xff08;只有insert&#xff0c;select&#xff0c;少u…

ul1977标准_UL 1977连接器认证知识

第一节、认识UL认证 和 CUL认证一&#xff0e;UL认证的一些标识:1. UL列名标志是最常用的 UL 标志。如果产品贴有这一标志&#xff0c;即表明 UL 认定该产品的代表性样品符合 UL 的安全要求。2. UL 认可零部件标志以上都是UL实验室列名&#xff0c;(从左至右)一种仅用于美国&…