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

解決React報錯JSX?element?type?does?not?have?any?construct?or?call?signatures

 更新時間:2022年12月02日 10:52:18   作者:Borislav?Hadzhiev  
這篇文章主要為大家介紹了解決React報錯JSX?element?type?does?not?have?any?construct?or?call?signatures,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

總覽

當(dāng)我們試圖將元素或react組件作為屬性傳遞給另一個組件,但是屬性的類型聲明錯誤時,會產(chǎn)生"JSX element type does not have any construct or call signatures"錯誤。為了解決該錯誤,可以使用React.ElementType類型。

這里有個例子來展示錯誤是如何發(fā)生的。

// App.tsx
import React from 'react';
interface Props {
  comp: JSX.Element;
}
const Wrapper: React.FunctionComponent<Props> = props => {
  const {comp: Comp} = props;
  // ?? JSX element type 'Comp' does not have any construct or call signatures.ts(2604)
  return (
    <div>
      <Comp name="James" />
    </div>
  );
};
const App: React.FunctionComponent = () => {
  const heading = ({name}: {name: string}) => <h2>Hello {name}</h2>;
  return (
    <div>
      <Wrapper comp={heading} />
    </div>
  );
};
export default App;

我們嘗試將一個React組件作為屬性傳遞給Wrapper組件,但我們將該React組件的類型聲明為JSX.Element

React.ElementType

為了解決該錯誤,將屬性的類型聲明為React.ElementType。

// App.tsx
import React from 'react';
interface Props {
  comp: React.ElementType; // ??? type it as React.ElementType
}
const Wrapper: React.FunctionComponent<Props> = props => {
  // ??? component names must start with capital letter
  const {comp: Comp} = props;
  return (
    <div>
      <Comp name="James" />
    </div>
  );
};
const App: React.FunctionComponent = () => {
  // ??? takes a name prop
  const heading = ({name}: {name: string}) => <h2>Hello {name}</h2>;
  return (
    <div>
      <Wrapper comp={heading} />
    </div>
  );
};
export default App;

請注意,React.ElementType可以為元素期望的屬性類型傳遞一個泛型。

在這個例子中,我們必須傳遞給它一個具有字符串類型的name屬性的對象,因為那是heading組件接收的屬性。

// App.tsx
import React from 'react';
interface Props {
  // ? explicitly type props comp takes
  comp: React.ElementType<{name: string}>;
}
const Wrapper: React.FunctionComponent<Props> = props => {
  // ??? component names must start with capital letter
  const {comp: Comp} = props;
  return (
    <div>
      <Comp name="James" />
    </div>
  );
};
const App: React.FunctionComponent = () => {
  const heading = ({name}: {name: string}) => <h2>Hello {name}</h2>;
  return (
    <div>
      <Wrapper comp={heading} />
    </div>
  );
};
export default App;

現(xiàn)在我們顯式地聲明了元素在使用時所接受的comp屬性的類型。這有助于我們在向組件傳遞屬性時利用IDE的自動完成功能。

我們也可以使用React.ComponentType,但這樣我們就需要對屬性聲明類型。

// App.tsx
import React from 'react';
interface Props {
  // ??? now using React.ComponentType ???
  comp: React.ComponentType<{name: string}>;
}
const Wrapper: React.FunctionComponent<Props> = props => {
  // ??? component names must start with capital letter
  const {comp: Comp} = props;
  return (
    <div>
      <Comp name="James" />
    </div>
  );
};
const App: React.FunctionComponent = () => {
  const heading = ({name}: {name: string}) => <h2>Hello {name}</h2>;
  return (
    <div>
      <Wrapper comp={heading} />
    </div>
  );
};
export default App;

React.ComponentType 中的泛型不能默認為any類型,因此我們需要顯示地聲明屬性的類型。

傳遞JSX元素

如果你需要將JSX元素作為屬性傳遞給組件,并且不是一個真正的組件,那么使用JSX.Element類型就是正確的。

// App.tsx
import React from 'react';
interface Props {
  // ??? using JSX.Element type
  comp: JSX.Element;
}
const Wrapper: React.FunctionComponent<Props> = props => {
  const {comp: Comp} = props;
  // ??? use as {Comp}
  return <div>{Comp}</div>;
};
const App: React.FunctionComponent = () => {
  const Heading = ({name}: {name: string}) => <h2>Hello {name}</h2>;
  // ??? we are passing an actual JSX element
  // because we didn't pass it as comp={Heading}
  return (
    <div>
      <Wrapper comp={<Heading name="James" />} />
    </div>
  );
};
export default App;

我們將comp屬性的類型聲明為JSX.Element,因為我們傳遞了一個真正的JSX元素(不是組件)到Wrapper組件上。

我們傳遞了一個JSX元素,是因為我們將comp={<Heading />}作為屬性進行傳遞,而不是comp={(props) => <h2>Hello world</h2>}。

需要注意的是,在第一種情況下,我們傳遞的是一個JSX元素屬性。而在第二種情況下,我們傳遞的是一個返回JSX元素的函數(shù)(一個功能組件)。

在Wrapper組件中,我們不應(yīng)嘗試使用JSX元素作為組件。比如說,不要這么寫<Comp />,而要這么寫{Comp}。

我們沒有傳遞一個真正的組件作為屬性,我們傳遞的是一個JSX元素,所以它不應(yīng)該作為一個組件使用。

更新類型包

如果前面的建議都沒有幫助,試著通過運行以下命令來更新你的React類型的版本。

# ??? with NPM
npm install react@latest react-dom@latest
npm install --save-dev @types/react@latest @types/react-dom@latest
# ----------------------------------------------
# ??? with YARN
yarn add react@latest react-dom@latest
yarn add @types/react@latest @types/react-dom@latest --dev

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

以上就是解決React報錯JSX element type does not have any construct or call signatures的詳細內(nèi)容,更多關(guān)于React JSX element報錯解決的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入掌握 react的 setState的工作機制

    深入掌握 react的 setState的工作機制

    本篇文章主要介紹了深入掌握 react的 setState的工作機制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 用React實現(xiàn)一個類 chatGPT 的交互式問答組件的方法詳解

    用React實現(xiàn)一個類 chatGPT 的交互式問答組件的方法詳解

    這篇文章主要給大家詳細介紹如何用React實現(xiàn)一個類 chatGPT 的交互式問答組件的方法,文中有詳細的代碼示例,對我們學(xué)習(xí)有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • React?Router?v6路由懶加載的2種方式小結(jié)

    React?Router?v6路由懶加載的2種方式小結(jié)

    React?Router?v6?的路由懶加載有2種實現(xiàn)方式,1是使用react-router自帶的?route.lazy,2是使用React自帶的?React.lazy,下面我們就來看看它們的具體實現(xiàn)方法吧
    2024-04-04
  • React路由渲染方式與withRouter高階組件及自定義導(dǎo)航組件應(yīng)用詳細介紹

    React路由渲染方式與withRouter高階組件及自定義導(dǎo)航組件應(yīng)用詳細介紹

    這篇文章主要介紹了React路由三種渲染方式、withRouter高階組件、自定義導(dǎo)航組件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • 詳解React+Koa實現(xiàn)服務(wù)端渲染(SSR)

    詳解React+Koa實現(xiàn)服務(wù)端渲染(SSR)

    這篇文章主要介紹了詳解React+Koa實現(xiàn)服務(wù)端渲染(SSR),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • React項目中動態(tài)插入HTML內(nèi)容的實現(xiàn)

    React項目中動態(tài)插入HTML內(nèi)容的實現(xiàn)

    本文主要介紹了React項目中動態(tài)插入HTML內(nèi)容的實現(xiàn),通過使用React的dangerouslySetInnerHTML屬性,我們可以將HTML內(nèi)容插入到組件中,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • React Ant Design樹形表格的復(fù)雜增刪改操作

    React Ant Design樹形表格的復(fù)雜增刪改操作

    這篇文章主要介紹了React Ant Design樹形表格的復(fù)雜增刪改操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • React Native中Navigator的使用方法示例

    React Native中Navigator的使用方法示例

    導(dǎo)航組件Navigator可以讓我們客戶端在不同的頁面見進行切換,下面這篇文章主要給大家介紹了關(guān)于React Native中Navigator的使用方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Hello?React的組件化方式之React入門小案例演示

    Hello?React的組件化方式之React入門小案例演示

    這篇文章主要介紹了Hello?React的組件化方式-React入門小案例,本文通過Hello?React的案例,?來體驗一下React開發(fā)模式,?以及jsx的語法,需要的朋友可以參考下
    2022-10-10
  • React useState的錯誤用法避坑詳解

    React useState的錯誤用法避坑詳解

    這篇文章主要為大家介紹了React useState的錯誤用法避坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論

九龙城区| 昔阳县| 花垣县| 社旗县| 固始县| 富川| 海林市| 深水埗区| 津市市| 利辛县| 景东| 札达县| 易门县| 连平县| 新民市| 庄浪县| 闵行区| 布尔津县| 安平县| 砚山县| 彭泽县| 元谋县| 绥化市| 垦利县| 喜德县| 丰宁| 凤山县| 旅游| 于都县| 绵阳市| 广灵县| 永丰县| 长兴县| 翁牛特旗| 惠安县| 天等县| 德阳市| 确山县| 大悟县| 乐业县| 祥云县|