React16版本Hook鉤子函式的簡單理解

2021-09-11 20:10:06 字數 3082 閱讀 8137

用於返回元件的初始化state並且返回更新方法,它只關心你傳入的初始值,可以包裝一下更便於抽出邏輯,元件只用於渲染。usestate返回的第乙個引數就是你initialstate傳入的值,也只是這個值,其他的不會影響這個值(如下面**的注釋);第二個引數是更新該值的方法,可以看到precount返回的也只是乙個count值。

//包裝一下

function

usemystate

(initialstate=1)

]}export

default

function

login

(props)

>

+<

/button>

<

/div>

}

但是usestate()直接傳值這種形式,每次介面渲染都會重新建立這個初始狀態,所以我們需要傳入個匿名函式即可。

const

[_state, _setstate]

=usestate((

)=>initialstate)

;

替代componentdidmountcomponentdidupdatecomponentwillunmount,使相應的繫結函式變得更加輕鬆。要想只在mount上執行並在unmount上清理,update上不做繫結,則第二引數傳入空陣列;第二引數傳入值則react內部會判斷之前值和傳入值的變化去重新監聽。(注意其實document的監聽是無法取消監聽的,應該監聽其他dom)

function

usemyeffect

(count)

times`

; console.

log(

11111111

,'監聽'

) document.

addeventlistener

('mousedown'

,(e)

=>

)return()

=>)}

;},[

]);}

//元件中引用並新增

usemyeffect

(count)

//

顯示當前context的值,且context改變時,該值也會更新

function

usemycontext

(defaultvalue)

const mycontext =

usemycontext()

; console.

log(

usecontext

(mycontext)

)//列印:

一般我們這樣去使用它:

const todosome = react.

createcontext

(null);

function

doother()

return

(>

/>

<

/todosome.provider>);

//deeptree

const doother =

usecontext

(todosome)

;

usecallback(fn, inputs)相當於usememo(() => fn, inputs)。二者有點相似有放在一起說了,都是返回乙個渲染dom;usecallback返回的是乙個函式,usememo直接就是dom。第二個陣列引數用來判斷是否重新渲染,相當於之前的shouldcomponentupdate操作,這個判斷是用「object.is」來判斷的,用+0和-0測試也會執行重新整理。

function

usemycallback()

<

/div>},

[a, b])}

function

usemymeno()

<

/div>},

[a, b])}

//元件中

let[ab,setab]

=usestate()

let cbdom =

usemycallback

(ab)

; console.

log(cbdom)

//ƒ ()

cbdom =

cbdom()

//, …}

let mmdom =

usemymeno

(ab)

console.

log(mmdom)

//, …}

return

註冊}}

>doab<

/button>

<

/div>

別被他的名字所欺騙,以為只是配合ref使用的,他是乙個該函式元件的例項變數(內部方法共享的變數),類似於之前class元件的this.xx,不僅可以作為ref的例項,還可以是任何變數的例項。

//class寫法

constructor()

componentdidmount()

);}componentwillunmount()

//函式元件寫法

function

timer()

);intervalref.current = id;

return()

=>;}

);// ...

}

這樣去建立useref,每次渲染時也都會重新建立,如果你想避免這種情況,請使用下面這種形式。

const ref =

useref

(new

intersectionobserver

(onintersect)

);

Titanium Mobile 1 6版本發布

強大的titanium mobile 23日發布了新的1.6版本。新版本為ios和android平台帶來了新的facebook api,並且為稍後發布的titanium plus模組打下了基礎。以下是三個方面的主要改進 1 新的facebook api 1 facebook oauth 2.0認證的...

Titanium Mobile 1 6版本發布

強大的titanium mobile 23日發布了新的1.6版本。新版本為ios和android平台帶來了新的facebook api,並且為稍後發布的titanium plus模組打下了基礎。以下是三個方面的主要改進 1 新的facebook api 1 facebook oauth 2.0認證的...

Titanium Mobile 1 6版本發布

強大的titanium mobile 23日發布了新的1.6版本。新版本為ios和android平台帶來了新的facebook api,並且為稍後發布的titanium plus模組打下了基礎。以下是三個方面的主要改進 1 新的facebook api 1 facebook oauth 2.0認證的...