這篇文章給大家分享的是有關React中常用的兩個Hook是什么的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Hook是React 16.8新增的特性,專門用在函數式組件,它可以代替class組件中react的其他特性,是實際工作中要常用到的。
hook是專門配合函數式組件開發使用的,可以用它代替class組件的一些生命周期,避免大量this引起的混亂,因此hook便于開發,且更易于讓開發者理解代碼
以上是個人的簡單總結,更多原因可以參考react官網:
https://react.docschina.org/docs/hooks-intro.html#motivation
代碼中:
React.useState(0)相當于class組件中的this.state添加一個屬性值
variable相當于class組件中的this.state. variable的值
setVariable可以用來修改variable的值,可以相當于class組件中的this.setState
import React,(useState) from 'react' export default function useState_Demo() { const [variable, setVariable] = useState(0);//通過解構賦值,我們拿到的variable、setVariable function changeVariable(){ setVariable((variable) => variable +1) //setVariable的回調中傳進來的參數是variable } render ( <div> <button onclick = {change}>點我會使variable+1</button> </div> ) }
代碼中:
以下代碼中可以看出,useEffect的使用代替了在class組件中componentDidMoun、componentDidUpdate、componentWillUnmount的使用
import React,(useState, useEffect) from 'react' export default function useState_Demo() { const [variable, setVariable] = useState(0);//通過解構賦值,我們拿到的variable、setVariable useEffect(() => { //這個return是在該組件監測的數據變化時或者被卸載時調用的,被卸載時調用可以相當于componentWillUnmount鉤子 return () => { console.log('該組件被卸載了') } }, [variable])//第二個參數傳了[variable],表示檢測variable的更新變化,一旦variable變化就會再次執行useEffect的回調 //第二個參數傳了[],表示誰都不檢測只執行一次useEffect的回調,相當于componentDidMount鉤子 //第二個參數不傳參,只要該組件有state變化就會執行useEffect的回調,相當于componentDidUpdate鉤子 function changeVariable(){ setVariable((variable) => variable +1) //setVariable的回調中傳進來的參數是variable } render ( <div> <button onclick = {change}>點我會使variable+1</button> </div> ) }
1、只在組件函數的最外層使用Hook,不要在循環,條件或嵌套函數中調用 Hook
import React,(useEffect) from 'react' export default function useState_Demo() { //這里才是正確的 useEffect(() => {}) //錯誤1,使用了條件判斷 if(true) { useEffect(() => {}) } //錯誤2,使用了循環 while(true) { useEffect(() => {}) } //錯誤3,使用了嵌套 useEffect(() => { useEffect(() => {}) }) }
2、不能在組件的函數外使用Hook
import React,(useState, useEffect) from 'react' //錯誤1,在組件函數外使用了useState const [variable, setVariable] = useState(0); //錯誤2,在組件函數外使用了useEffect useEffect(() => {}) export default function useState_Demo() { //在組件函數里使用才是正確的 const [variable, setVariable] = useState(0); }
3、為了避免以上的錯誤,可以 安裝eslint-plugin-react-hooks
ESLint 插件來檢查代碼上錯誤
hook就是一個函數,自定義hook是為了方便組件之間共享邏輯,其實就是對復用功能進行封裝,自定義hook內部也調用了react自帶的hook,命名要以use開頭
//自定義hook function useHook(initState) { const [variable, setVariable] = useState(initState) return variable; } //使用自定義hook export default function useState_Demo() { const variableState = useHook(0) }
可能你會疑惑,多個組件中使用相同的 Hook 會共享 state 嗎?
答案是:不會。因為每次調用react自帶的hook都是獨自互不影響的,所以自定義hook被多次重復調用也是獨自互不影響的
感謝各位的閱讀!關于“React中常用的兩個Hook是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。