網站首頁 編程語言 正文
總覽
產生"Element type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got"錯誤有多個原因:
- 在導入組件時,將默認導入和命名導入混淆。
- 忘記從文件中導出組件。
- 不正確地定義了一個React組件,例如,作為一個變量而不是一個函數或類。
為了解決該錯誤,確保使用大括號來導入命名導出而不是默認導出,并且只使用函數或類作為組件。
這里有個示例來展示錯誤是如何發生的。
// ??? must be function or class (NOT variable) const Button = <button>Click</button>; export default function App() { // ?? Warning: React.jsx: type is invalid -- expected a string // (for built-in components) or a class/function // (for composite components) but got: return ( <div> <Button /> <h1>hello world</h1> </div> ); }
上述代碼問題在于,我們聲明了Button
變量,該變量返回了JSX代碼。
函數組件
為了解決該錯誤,我們必須使用函數組件來代替。
// ??? is now function const Button = () => { return <button>Click</button>; }; export default function App() { return ( <div> <Button /> <h1>hello world</h1> </div> ); }
現在,Button
是一個函數,并返回JSX代碼。可以作為一個React組件使用。
混淆導入導出
另一個常見的錯誤原因是混淆了默認和命名的導入和導出。
當組件使用默認導出來導出時,你必須確保導入的時候沒有使用大括號。
// Header.js // ??? default export export default function Header() { return <h2>Hello world</h2>; }
現在,它必須不帶大括號導入。
// ??? default import import Header from './Header'; export default function App() { return ( <div> <Header /> </div> ); }
另一方面,如果你的組件使用命名導出來導出的話,它必須使用大括號導入。
// Header.js // ??? named export export function Header() { return <h2>Hello world</h2>; }
現在,當組件被導入時,它必須包裹在大括號內。
// ??? named import import {Header} from './Header'; export default function App() { return ( <div> <Header /> </div> ); }
確保你沒有將一個組件作為默認導出,并試圖將其作為命名導入(用大括號包裹),或者反過來。因為這是導致錯誤的一個常見原因。
如果錯誤尚未解決,確保重啟你的開發服務以及IDE。
檢查路徑
你還應該確保指向模塊的路徑拼寫正確,大小寫正確以及指定導出組件的文件。
確保路徑正確的最好方法是刪除它,開始輸入路徑,讓你的IDE用自動補全來幫助你。
如果你開始輸入路徑后沒有得到自動補全,很可能是你的路徑不正確。
使用ESM
確保你沒有混淆ES Modules
和CommonJS
語法。
你應該在你的React.js應用程序中只使用import/export
語法,而不是module.exports
或require()
語法。
從react-router-dom導入
當我們從react-router
而不是react-router-dom
導入東西時,有時也會出現這個錯誤。
// ?? BAD // import {Link} from 'react-router'; // ? GOOD import {Link} from 'react-router-dom';
如果你使用react router,請確保從react-router-dom
導入,而不是從react-router
中。
當我們試圖使用不是函數或類的東西作為一個組件時,會產生"Element type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got:"錯誤信息。
錯誤信息
你應該看一下got:
后面的錯誤信息,因為它可能表明是什么原因導致的錯誤。
當我們使用一個組件時,我們必須確保它是一個函數或一個類。如果你使用任何其他的值作為一個組件,就會引起錯誤。
原文鏈接:https://juejin.cn/post/7178367231602982970
相關推薦
- 2022-04-20 Python?設計模式中的創建型建造者模式_python
- 2022-11-17 Android?Compose?屬性動畫使用探索詳解_Android
- 2022-04-24 torch.utils.data.DataLoader與迭代器轉換操作_python
- 2024-07-15 linux系統管理高級命令(練習)(six day)
- 2022-03-30 android?RecyclerView添加footerview詳解_Android
- 2022-05-12 Kotlin 擴展函數 鏈式調用 泛型與擴展函數
- 2023-05-14 Python實現批量導入1000條xlsx數據_python
- 2022-12-26 python3中的函數與參數及空值問題_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支