中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

昆明新建設電影院網(wǎng)站互聯(lián)網(wǎng)推廣軟件

昆明新建設電影院網(wǎng)站,互聯(lián)網(wǎng)推廣軟件,做設計的一般在什么網(wǎng)站找素材,羅湖專業(yè)做網(wǎng)站公司React Hookshooks介紹useState(保存組件狀態(tài))useEffect()useCallback(記憶函數(shù))useMemo() 記憶組件useRef(保存引用值)useReducer()useContext(減少組件層級)自定義hookshooks介紹 在react類組件(class)寫法中,有setState和生命周期對狀態(tài)進…

React Hooks

        • hooks介紹
        • useState(保存組件狀態(tài))
        • useEffect()
        • useCallback(記憶函數(shù))
        • useMemo() 記憶組件
        • useRef(保存引用值)
        • useReducer()
        • useContext(減少組件層級)
        • 自定義hooks

hooks介紹

在react類組件(class)寫法中,有setState和生命周期對狀態(tài)進行管理,但是在函數(shù)組件中不存在,因此引入hooks

React的組件創(chuàng)建方式,一種是類組件,一種是純函數(shù)組件,并且React團隊希望,組件不要變成復雜的容器,最好只是數(shù)據(jù)流的管道。開發(fā)者根據(jù)需要,組合管道即可。也就是說組件的最佳寫法應該是函數(shù),而不是類。

使用hooks理由

  1. 高階組件為了復用,導致代碼層級復雜

  2. 生命周期的復雜

  3. 寫成functional組件,無狀態(tài)組件 ,因為需要狀態(tài),又改成了class,成本高

類組件與函數(shù)組件的區(qū)別:

  • 函數(shù)組件沒有生命周期,類組件有(掛載、更新、銷毀)

  • 函數(shù)組件沒有狀態(tài)(state),類組件有

  • 函數(shù)組件沒有this,類組件有

useState(保存組件狀態(tài))

純函數(shù)組件沒有狀態(tài),useState()用于設置和使用組件的狀態(tài)屬性

const [state, setstate] = useState(initialState)
//state:初始狀態(tài)屬性,指向狀態(tài)當前值
//setstate:修改狀態(tài)屬性函數(shù),用來更新狀態(tài)
//initialState:狀態(tài)的初始值,該值會賦給state

state是一個對象:

setState()不會局部更新

useEffect()

useEffect()是副作用的鉤子,可以檢測數(shù)據(jù)更新 ,可以實現(xiàn)特定的功能,如異步請求

  • useEffect()接受兩個參數(shù),第一個參數(shù)是你要進行的異步操作,第二個參數(shù)是一個數(shù)組,用來給出Effect()的依賴項。
  • 只要數(shù)組發(fā)生改變,useEffect()就會執(zhí)行。
  • 當?shù)诙検÷圆惶顣r,useEffect()會在每次組件渲染時執(zhí)行,這一點類似于componentDidMount。
useEffect(() => {
//effect
return () => {
//cleanup
};
}, [依賴的狀態(tài);空數(shù)組,表示不依賴])

不要對 Dependencies 撒謊,如果你明明使用了某個變量,卻沒有申明在依賴中,你等于向 React撒了謊,后果就是,當依賴的變量改變時,useEffffect也不會再次執(zhí)行, eslint會報警告

useEffffect和useLayoutEffffect區(qū)別:

簡單來說就是調(diào)用時機不useLayoutEffect() 和原來componentDidMount &componentDidUpdate
一致,在react完成DOM更新后馬上同步調(diào)用的代碼,會阻塞頁面渲染。而 useEffect() 是會在整個頁面渲染完才會異步調(diào)用。

在實際使用時如果想避免頁面抖動(在 useEffect 里修改DOM很有可能出現(xiàn))的話,可以把需要操作DOM的代碼放useLayoutEffect 里。在這里做點dom操作,這些dom修改會和 react 做出的更改一起被一次性渲染到屏幕上

useCallback(記憶函數(shù))

防止因為組件重新渲染,導致方法被重新創(chuàng)建,起到緩存作用;只有第二個參數(shù) 變化了,才重新聲明一次

var handleClick = useCallback(()=>{
console.log(name)
},[name])
<button onClick={()=>handleClick()}>hello</button>
//只有name改變后, 這個函數(shù)才會重新聲明一次,
//如果傳入空數(shù)組, 那么就是第一次創(chuàng)建后就被緩存, 如果name后期改變了,拿到的還是老的name。
//如果不傳第二個參數(shù),每次都會重新聲明一次,拿到的就是最新的name.

useMemo() 記憶組件

useCallback() 的功能完全可以由 useMemo() 所取代,使用 useMemo() 也可以返回一個記憶函數(shù)

useCallback(fn, inputs) is equivalent to useMemo(() => fn, inputs).

useCallback()與useMemo()的區(qū)別:

  • useCallback 不會執(zhí)行第一個參數(shù)函數(shù),而是將它返回給你,而useMemo會執(zhí)行第一個函數(shù)并且將函數(shù)執(zhí)行結(jié)果返回給你。
  • useCallback() 常用記憶事件函數(shù),生成記憶后的事件函數(shù)并傳遞給子組件使用。而 useMemo() 更適合經(jīng)過函數(shù)

useRef(保存引用值)

用于在函數(shù)組件中獲取真實的DOM元素對象或者是組件實例。(因為函數(shù)組件沒有實例,所以這里的獲取組件實例指的是獲取類組件實例)

返回值是一個可變的ref對象,并且這個對象的值發(fā)生改變時不會引起頁面的渲染。

const myswiper = useRef(null);<Swiper ref={myswipe}/

useRef()可以存儲不需要引起頁面渲染的數(shù)據(jù);修改useRef值的唯一方法是修改.current,且修改后不會引起重渲染。

useReducer()

在使用React的過程中,如遇到狀態(tài)管理,一般會用到Redux,而React本身是不提供狀態(tài)管理的。而useReducer()提供了狀態(tài)管理

useState() 的替代方案,用于包含多種狀態(tài),或者下一個 state 依賴于之前的 state,實現(xiàn)函數(shù)組件的狀態(tài)管理。

基本原理是通過用戶在頁面中發(fā)起action, 從而通過reducer方法來改變state, 從而實現(xiàn)頁面和狀態(tài)的通信。

useContext(減少組件層級)

useContext()可以共享狀態(tài),作用是進行狀態(tài)的分發(fā),避免了使用Props進行數(shù)據(jù)的傳遞

import React from 'react'
var GlobalContext= React.createContext()
// 注意此時的reduecer 返回值是一個對象 {isShow:false,list:[]}
function App(props){
let [state,dispatch] = useReducer(reducer,{isShow:true,list:[]})
return <GlobalContext.Provider value={{
dispatch
}}>
<div>
{
state.isShow?
<div >我是選項卡</div>
:null
}
{props.children}
</div>
</GlobalContext.Provider>
}
function Detail(){
var {dispatch} = useContext(GlobalContext)
useEffect(() => {
//隱藏
dispatch({
type:"Hide",
payload:false
})
return () => {
//顯示
dispatch({
type:"Show",
payload:true
})
};
}, [])
return <div>
detail
</div>
}

自定義hooks

當我們想在兩個函數(shù)之間共享邏輯時,我們會把它提取到第三個函數(shù)中。

用戶自定義的Hooks

  • 命名的要求:用use開頭,后跟名稱(首字母大寫)

  • 作用:根據(jù)具體業(yè)務的需求,對Hooks中默認的鉤子函數(shù)進行封裝,使代碼的結(jié)構(gòu)更加清晰,便于使用和維護

import React, { useEffect, useState } from 'react'
function useToLocaleUpperCase(text) {const [name, setName] = useState(text)useEffect(() => {setName(name.toLocaleUpperCase())}, [])return { name };
}
export default function App() {const { name } = useToLocaleUpperCase('zhansan')return (<div>App-{name}<Child></Child></div>)
}
function Child() {const { name } = useToLocaleUpperCase('lisi')return (<div>App-{name}</div>)
}
http://www.risenshineclean.com/news/6920.html

相關(guān)文章:

  • 綿陽做最好優(yōu)化網(wǎng)站的網(wǎng)站制作免費
  • 做個營銷型網(wǎng)站設計國際站seo優(yōu)化是什么意思
  • 江門網(wǎng)站建設公司哪里注冊域名最便宜
  • 平面設計可以做網(wǎng)站湖北最新消息
  • 源代碼做的網(wǎng)站好用么企業(yè)推廣網(wǎng)站有哪些
  • wordpress 自適應門戶如何做seo
  • 廈門b2b網(wǎng)站建設一般網(wǎng)站推廣要多少錢
  • asp網(wǎng)站建設實錄性價比高seo排名
  • 如何對網(wǎng)站進行管理友情鏈接交易購買
  • 網(wǎng)站建設第一品牌 網(wǎng)站設計軟文代寫新聞稿
  • 學做網(wǎng)站需要學哪些軟件資源搜索器
  • 西安知名網(wǎng)站建設公司排名seo網(wǎng)絡優(yōu)化前景怎么樣
  • app大概需要多少錢太原seo外包服務
  • 上海到北京多遠百度上如何做優(yōu)化網(wǎng)站
  • 濮陽網(wǎng)站建設在哪做網(wǎng)上如何做廣告
  • 上海網(wǎng)站建設專業(yè)公司優(yōu)化關(guān)鍵詞排名seo
  • 搭建公司內(nèi)部網(wǎng)站搜索引擎seo如何賺錢
  • 專業(yè)網(wǎng)站建設模板北京搜索引擎優(yōu)化seo專員
  • 網(wǎng)站公司鄭州百度安裝app
  • seo網(wǎng)站編輯是做什么的競價排名深度解析
  • 網(wǎng)站開發(fā)使用的技術(shù)有哪些百度信息流推廣平臺
  • 新房網(wǎng)站建設日結(jié)app推廣聯(lián)盟
  • bootstrap 企業(yè)網(wǎng)站好的網(wǎng)絡推廣平臺
  • 網(wǎng)站建設:宏智網(wǎng)絡科技商業(yè)推廣費用一般多少
  • 馬克斯網(wǎng)站建設百度行發(fā)代理商
  • 公司網(wǎng)站模板凡建站如何做外貿(mào)網(wǎng)站的推廣
  • 網(wǎng)站制造關(guān)鍵詞優(yōu)化推廣排名多少錢
  • brophp框架做網(wǎng)站模板成人職業(yè)培訓學校
  • 網(wǎng)站建設與app開發(fā)北京高端網(wǎng)站建設
  • 建個網(wǎng)站 網(wǎng)頁空間多少it培訓機構(gòu)推薦