最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決React報(bào)錯(cuò)Invalid hook call

 更新時(shí)間:2022年12月02日 09:31:48   作者:Borislav Hadzhiev  
這篇文章主要為大家介紹了React報(bào)錯(cuò)Invalid hook call解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

總覽

導(dǎo)致"Invalid hook call. Hooks can only be called inside the body of a function component"錯(cuò)誤的有多種原因:

  • reactreact-dom的版本不匹配。
  • 在一個(gè)項(xiàng)目中有多個(gè)react包版本。
  • 試圖將一個(gè)組件作為一個(gè)函數(shù)來(lái)調(diào)用,例如,App()而不是<App />
  • 在類里面使用鉤子,或者在不是組件或自定義鉤子的函數(shù)中使用鉤子。

版本匹配

在項(xiàng)目的根目錄下打開(kāi)終端,更新reactreact-dom包的版本,確保版本是相匹配的,并且沒(méi)有使用過(guò)時(shí)的版本。

# ??? with NPM
npm install react@latest react-dom@latest
# ??? ONLY If you use TypeScript
npm install --save-dev @types/react@latest @types/react-dom@latest
# ----------------------------------------------
# ??? with YARN
yarn add react@latest react-dom@latest
# ??? ONLY If you use TypeScript
yarn add @types/react@latest @types/react-dom@latest --dev

如果錯(cuò)誤仍存在,嘗試刪除node_modules以及package-lock.json(不是package.json)文件,重新運(yùn)行npm install 并重啟你的IDE。

這個(gè)錯(cuò)誤通常是由于在同一個(gè)項(xiàng)目中擁有多個(gè)版本的react造成的。

# ??? delete node_modules and package-lock.json
rm -rf node_modules
rm -f package-lock.json
# ??? clean npm cache
npm cache clean --force
npm install

如果錯(cuò)誤仍然存在,請(qǐng)確保重啟了IDE和開(kāi)發(fā)服務(wù)。VSCode經(jīng)常出現(xiàn)故障,需要重啟。

調(diào)用組件

這里有另一個(gè)示例,用來(lái)展示錯(cuò)誤是如何發(fā)生的。

// App.js
import {useState} from 'react';
// ??? Don't call components as functions ???
App();
export default function App() {
  /**
   * ?? Warning: Invalid hook call. Hooks can only be
   * called inside of the body of a function component.
   *  This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
   */
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1>Hello world</h1>
    </div>
  );
}

問(wèn)題在于,我們將App組件作為函數(shù)進(jìn)行調(diào)用。

你應(yīng)該只使用具有JSX語(yǔ)法的組件。比如:<App country="Austria" age="30" />,而不是App({country: 'Austria', age: 30})。

確保你沒(méi)有在一個(gè)類組件,或一個(gè)既不是組件也不是自定義鉤子的函數(shù)里面調(diào)用鉤子。

如果你有一個(gè)類,請(qǐng)將其轉(zhuǎn)換為能夠使用鉤子的函數(shù)。

下面是一個(gè)例子,說(shuō)明在一個(gè)既不是組件也不是自定義鉤子的函數(shù)中是如何引起錯(cuò)誤的。

// App.js
import {useState, useEffect} from 'react';
// ??? not a component nor custom hook
// so it can't use hooks
function counter() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    console.log('hello world');
  }, []);
}

counter函數(shù)以小寫的c開(kāi)頭,所以它不被React認(rèn)為是一個(gè)組件。因?yàn)樗械慕M件名稱必須以大寫字母開(kāi)頭。它同樣也不是自定義鉤子,因?yàn)槠涿Q沒(méi)有以use開(kāi)頭,比如說(shuō)useCounter。

我們只能在函數(shù)組件或自定義鉤子里面使用鉤子,所以能夠使用鉤子的一個(gè)方法是將counter重命名為useCounter。

import {useState, useEffect} from 'react';
function useCounter() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    console.log('hello world');
  }, []);
}

現(xiàn)在React認(rèn)為useCounter是一個(gè)自定義鉤子,并允許我們?cè)诶锩媸褂勉^子。

就像文檔中所說(shuō)的那樣:

  • 只從React函數(shù)組件或自定義鉤子中調(diào)用Hook
  • 只在最頂層使用 Hook
  • 不要在循環(huán),條件或嵌套函數(shù)中調(diào)用 Hook
  • 確保總是在你的 React 函數(shù)的最頂層以及任何 return 之前使用 Hook

翻譯原文鏈接:bobbyhadz.com/blog/react-…

以上就是解決React報(bào)錯(cuò)Invalid hook call的詳細(xì)內(nèi)容,更多關(guān)于React報(bào)錯(cuò)Invalid hook call的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解三種方式在React中解決綁定this的作用域問(wèn)題并傳參

    詳解三種方式在React中解決綁定this的作用域問(wèn)題并傳參

    這篇文章主要介紹了詳解三種方式在React中解決綁定this的作用域問(wèn)題并傳參,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • React組件傳children的方案總結(jié)

    React組件傳children的方案總結(jié)

    自定義組件的時(shí)候往往需要傳 children,由于寫法比較多樣,我就總結(jié)了一下,文中有詳細(xì)的總結(jié)內(nèi)容和代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-10-10
  • react滾動(dòng)加載useInfiniteScroll?詳解

    react滾動(dòng)加載useInfiniteScroll?詳解

    使用useInfiniteScroll?hook可以處理檢測(cè)用戶何時(shí)滾動(dòng)到頁(yè)面底部的邏輯,并觸發(fā)回調(diào)函數(shù)以加載更多數(shù)據(jù),它還提供了一種簡(jiǎn)單的方法來(lái)管理加載和錯(cuò)誤消息的狀態(tài),今天通過(guò)實(shí)例代碼介紹下react滾動(dòng)加載useInfiniteScroll?相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • 可定制React自動(dòng)完成搜索組件Turnstone實(shí)現(xiàn)示例

    可定制React自動(dòng)完成搜索組件Turnstone實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了可定制React自動(dòng)完成搜索組件Turnstone實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React開(kāi)啟代理的2種實(shí)用方式

    React開(kāi)啟代理的2種實(shí)用方式

    最近有不少伙伴詢問(wèn)react的代理配置,自己也去試驗(yàn)了一下發(fā)現(xiàn)不少的問(wèn)題,在這就將所遇到的心得分享出來(lái),這篇文章主要給大家介紹了關(guān)于React開(kāi)啟代理的2種實(shí)用方式的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 一文詳解React Redux設(shè)計(jì)思想與工作原理

    一文詳解React Redux設(shè)計(jì)思想與工作原理

    最近看項(xiàng)目中使用了?Redux,?便嘗試了解一波?Redux?的設(shè)計(jì)思想與工作原理,所以本文詳細(xì)的給大家介紹了Redux設(shè)計(jì)思想與工作原理,需要的朋友可以參考下
    2023-09-09
  • React?函數(shù)式組件和類式組件詳情

    React?函數(shù)式組件和類式組件詳情

    這篇文章主要介紹了React函數(shù)式組件和類式組件詳情,React是組件化的的JS庫(kù),組件化也是React的核心思想,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • react將文件轉(zhuǎn)為base64上傳的示例代碼

    react將文件轉(zhuǎn)為base64上傳的示例代碼

    本文主要介紹了react將文件轉(zhuǎn)為base64上傳的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • React中使用Redux Toolkit狀態(tài)管理的示例詳解

    React中使用Redux Toolkit狀態(tài)管理的示例詳解

    在現(xiàn)代 React 應(yīng)用程序中,狀態(tài)管理是一個(gè)至關(guān)重要的部分,使用 Redux Toolkit 可以簡(jiǎn)化 Redux 的配置和管理,本文將通過(guò)三個(gè)文件的示例,詳細(xì)講解如何使用 Redux Toolkit 創(chuàng)建和管理一個(gè)簡(jiǎn)單的計(jì)數(shù)器狀態(tài),需要的朋友可以參考下
    2024-11-11
  • React?diff算法超詳細(xì)講解

    React?diff算法超詳細(xì)講解

    渲染真實(shí)DOM的開(kāi)銷很大,有時(shí)候我們修改了某個(gè)數(shù)據(jù),直接渲染到真實(shí)dom上會(huì)引起整個(gè)dom樹(shù)的重繪和重排。我們希望只更新我們修改的那一小塊dom,而不是整個(gè)dom,diff算法就幫我們實(shí)現(xiàn)了這點(diǎn)。diff算法的本質(zhì)就是:找出兩個(gè)對(duì)象之間的差異,目的是盡可能做到節(jié)點(diǎn)復(fù)用
    2022-11-11

最新評(píng)論

杭锦后旗| 陆丰市| 余干县| 汶上县| 巩义市| 安国市| 宁陕县| 桂平市| 永宁县| 余干县| 封丘县| 双江| 江永县| 红桥区| 郓城县| 专栏| 西峡县| 汽车| 新泰市| 万宁市| 丰台区| 万年县| 和平县| 满洲里市| 佳木斯市| 米易县| 永丰县| 通辽市| 瑞安市| 唐海县| 雷山县| 临沭县| 武宣县| 闸北区| 嘉义市| 六枝特区| 两当县| 东源县| 大石桥市| 新兴县| 马公市|