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.pswp.cn/news/273235.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273235.shtml
英文地址,請注明出處:http://en.pswp.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;(從左至右)一種僅用于美國&…