【问题标题】:How to map an array of elements for Reach component in typescript?如何在打字稿中为 Reach 组件映射元素数组?
【发布时间】:2020-06-01 20:01:55
【问题描述】:

这是我的组件:

import React, { FunctionComponent as FC } from 'react';

type shapeMidNumbersInput = { arrMidNumbers: Array<number> };

const MidNumbers: FC<shapeMidNumbersInput> = ({ arrMidNumbers }): Array<Element> => (
  <section>
    {arrMidNumbers.map(item => (
      <div>{item}</div>
    ))}
  </section>
);

const Caller = () => <MidNumbers arrMidNumbers={[3, 4, 5]} />;

export default Caller;

我得到的错误是:

类型“JSX.Element[]”不可分配给类型“Element[]”。 “Element”类型缺少“Element”类型的以下属性:assignedSlot、attributes、classList、className 等 123 个。 “元素”类型缺少“ReactElement”类型、道具、键的以下属性

我期待输出

<section>
   <div>3</div>
   <div>4</div>
   <div>5</div>
</section>

我的打字稿代码有什么问题吗?

谢谢

【问题讨论】:

    标签: reactjs typescript


    【解决方案1】:

    你不需要声明函数MidNumbers的返回类型。 Array&lt;Element&gt; 是错误的类型,无论如何将函数变量本身声明为 FC&lt;shapeMidNumbersInput&gt; 类型会自动正确推断返回类型,因为泛型类会为您完成。

    const MidNumbers: FC<shapeMidNumbersInput> = ({ arrMidNumbers }) => (
      <section>
        {arrMidNumbers.map(item => (
          <div>{item}</div>
        ))}
      </section>
    );
    

    【讨论】:

    • 谢谢。我意识到了我的错误,因为最初我返回的数组没有包含“部分”。无论如何,这本身就是错误的,因为我没有根包装器。这将作为对我的提醒。谢谢
    • 如果需要,您可以将其作为 React 片段内的映射数组返回。但这本身就是一个节点——组件不能返回一个数组,只能返回一个节点,这就是 React Fragment 存在的原因(并且非常有用)
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2023-03-15
    • 2020-12-23
    • 2019-11-19
    • 2018-09-28
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多