繁体   English   中英

将参数传递给 function 组件 - typescript ts2322 错误

[英]Passing argument to function component - typescript ts2322 error

我在以下简单组件中遇到 typescript 问题。

这按预期工作:

import React from "react";

export default function App() {
  const simpleComp = (shouldSayA: boolean) => {
    return shouldSayA ? <p>a</p> : <p>b</p>;
  };

  return <div>{simpleComp(true)}</div>;
}

但是,当我将 simpleComp function 转换为 JSX function 组件 SimpleComp 时,如下所示:

import React from "react";

export default function App() {
  const SimpleComp = (shouldSayA: boolean) => {
    return shouldSayA ? <p>a</p> : <p>b</p>;
  };
  return <div><SimpleComp shouldSayA={true} /></div>;
}

我收到以下错误:

const SimpleComp: (shouldSayA: boolean) => JSX.Element
Type '{ shouldSayA: boolean; }' is not assignable to type 'IntrinsicAttributes & boolean'.
  Type '{ shouldSayA: boolean; }' is not assignable to type 'true'.ts(2322)

我可以通过执行以下操作来修复 TS 错误:

import React from "react";

export default function App() {
  const SimpleComp = ({shouldSayA}: { shouldSayA: boolean }) => {
    return shouldSayA ? <p>a</p> : <p>b</p>;
  };
  return (
    <div>
      <SimpleComp shouldSayA={true} />
    </div>
  );
}

但我确定我缺少一些更简单的方法。 为什么TS会在第二个例子中抛出错误?

传递给组件的第一个参数是包含所有道具的 object。

如果您传递一个道具,那么它将是一个包含单个键值对的 object。

这就是组件的工作方式。 没有更简单的方法。


也就是说,通常最好:

  • 一次定义您的组件,而不是在每次渲染时重新定义它们
  • 将您的类型定义为变量而不是内联
import React from "react";

const App = () => {
  return (
    <div>
      <SimpleComp shouldSayA={true} />
    </div>
  );
};

type SimpleCompProps = {
  shouldSayA: boolean;
};

const SimpleComp = ({ shouldSayA }: SimpleCompProps) => {
  return shouldSayA ? <p>a</p> : <p>b</p>;
};

export default App;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM