摘要:經典案例此例子中是最新的語法其中是他的值是用來設置值的函數是初始值該初始值可以接受任何參數但是記得當他接受為一個函數時就變成了延遲初始化該函數返回值即為這兩種初始化方式是相等的但是在函數為初始值時會被執行一次這里只會在初始化的時候執行中的
useState
經典案例:
import { useState } from "react"; function Example() { const [count, setCount] = useState(0); return () }You clicked {count} times
此例子中, useState(0) 是最新的 hooks api;
語法:
function useState(initialState: S | (() => S)): [S, Dispatch>];
其中 state 是他的值, setState 是用來設置值的函數, initialState 是初始值
useState-initialState該初始值可以接受任何參數,但是記得當他接受為一個函數時,就變成了Lazy initialization (延遲初始化)
該函數返回值即為initialState
const [count, setCount] = useState(0); const [count, setCount] = useState(()=>0); // 這兩種初始化方式 是相等的,但是在函數為初始值時會被執行一次 const [count, setCount] = useState(()=>{ console.log("這里只會在初始化的時候執行") // class 中的 constructor 的操作都可以移植到這里 return 0 }); // 當第一次執行完畢后 就和另一句的代碼是相同的效果了useState-setState
也許很多人 在使用 class 的 setState 時候,會經常使用他的回調函數,
但是這里很遺憾,他只接受新的值,如果想要對應的回調,可以使用useEffect,這個問題等會會提供一個跳轉鏈接
語法:
function useEffect(effect: EffectCallback, deps?: DependencyList): void;
經典案例:
useEffect(() => { console.log("在 dep 改變時觸發,若無 dep 則,每次更新組件都會觸發") return () => { console.log("在組件 unmount 時觸發") }; });
deps 必須是一個數組,但是如果是一個空數組時:
useEffect(() => { console.log("效果的等于 componentDidMount") }, [])
即使有 deps ,他在初始化時也會觸發一次
與 setState 形成回調函數:在useState-setState 中提到, class 中 setState 都是有回調的,而在 hooks 中 通過 useEffect 同樣也可以實現它的效果
關于回調值的探秘:說起回調值,他能接受很多值,但是我們要搞清楚一點 他到底可以接受什么值,而他的變化的檢測:
首先我們應該清楚, string,number,undefined,null 他的值都是能夠正常檢測的,
問題的關鍵還是在于 object 和 function
關于 object 的試驗:
將回調值設置為一個在 function 外面的 object:
let deps = {grewer: 1}
在點擊按鈕時:
deps.grewer = deps.grewer + 1; console.log(deps)
可以發現:
deps.grewer 的值在變化,但是 effect 卻沒有觸發
而這樣設置值時:
deps = {grewer: deps.grewer + 1};
每次都會觸發 effect 函數
再次試驗:
deps = Object.assign({}, deps)
同樣地 每次都會觸發 effect 函數
得出結論:
當依賴值為 object 時,他的值引用發生變化就會觸發 effect 的更新
但是如果只是對象里某個值變化而引用不變化,effect 依舊不會觸發
關于 function 的試驗結論:
如果初始值為 function, 而將其改為數字等,會觸發 effect
function 也是一個對象,當我們添加一個值在上面時,他的 effect 也不會觸發
引用為一個新函數時,他每次都會觸發;
試驗完畢,相信大家對于 effect 也有了許多的了解
后續還會講述其他 hooks api 與 redux 的全面轉換, eslint 的新配置等
相關文章:react hooks 全面轉換攻略(一) react本篇之useState,useEffect
react hooks 全面轉換攻略(二) react本篇剩余 api
react hooks 全面轉換攻略(三) 全局存儲解決方案
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103301.html
摘要:不知道大家有沒有使用過他的作用和中的差不多吧在需要讀取的高度寬度的時候特別需要說到現在基本已經講完了除了我將會放在篇中講述相關文章全面轉換攻略一本篇之全面轉換攻略二本篇剩余全面轉換攻略三全局存儲解決方案 useCallback,useMemo 因為這兩個 api 的作用是一樣的,所以我放在一起講; 語法: function useMemo(factory: () => T, deps:...
摘要:他們的應用是比較復雜的,組件樹也是非常龐大,假設有一千個組件要渲染,每個耗費一千個就是由于是單線程的,這里都在努力的干活,一旦開始,中間就不會停。 悄悄的, React v16.7 發布了。 React v16.7: No, This Is Not The One With Hooks. showImg(https://segmentfault.com/img/bVblq9L?w=97...
摘要:在這種情況下,如果狀態發生變化,將再次運行以從獲取數據。你可以在內做到在表單中獲取數據到目前為止,我們只有和按鈕的組合。現在,在獲取數據時,可以使用向函數發送信息。例如,在成功請求的情況下,用于設置新狀態對象的數據。 原文鏈接: https://www.robinwieruch.de/r... 在本教程中,我想通過state和effect hook來像你展示如何用React Hook...
摘要:現在,請求數據和查詢參數兩個相互獨立,但是我們需要像一個辦法希望他們耦合起來,只獲取輸入框輸入的參數指定的話題文章。好了,現在一旦你改變輸入框內容,數據就會重新獲取。 showImg(https://segmentfault.com/img/remote/1460000018652592?w=1024&h=683); 通過這個教程,我想告訴你在 React 中如何使用 state 和 ...
摘要:在線傳遞給的是而不是,返回值即是想要透傳的數據了。所以函數組件在每次渲染的時候如果有傳遞函數的話都會重渲染子組件。在學會使用React Hooks之前,可以先看一下相關原理學習React Hooks 前言 在 React 的世界中,有容器組件和 UI 組件之分,在 React Hooks 出現之前,UI 組件我們可以使用函數,無狀態組件來展示 UI,而對于容器組件,函數組件就顯得無能為力,我...
閱讀 2236·2021-11-24 11:15
閱讀 3080·2021-11-24 10:46
閱讀 1378·2021-11-24 09:39
閱讀 3924·2021-08-18 10:21
閱讀 1478·2019-08-30 15:53
閱讀 1395·2019-08-30 11:19
閱讀 3320·2019-08-29 18:42
閱讀 2321·2019-08-29 16:58