如何将“参数”传递给 react 组件

How to pass "parameter" to react component

提问人:TCoder2231 提问时间:12/7/2021 更新时间:12/7/2021 访问量:4082

问:

我有一个简单的问题,我正在尝试在现有代码库中重构我的代码,该代码库使用渲染函数,但是我想用 react 函数组件替换它。

但是,当我传入一个名为“searchResults”的参数(一个列表)时,我收到错误。

下面是前面未重构的代码

 searchResults.sort((a, b) => new Date(b[0].created) - new Date(a[0].created));

const Rows = [];

searchResults.forEach((appResults, i) => {
  Rows.push({
    cells: [
      appResults[0].applicationId,
      <>{renderSuccessCount(appResults)}</>,
      prettifyDate(appResults[0].created)
    ],
    isOpen: false
  });

这是我重构的代码

 const newRows = [];

searchResults.forEach((appResults, i) => {
  newRows.push({
    cells: [
      appResults[0].applicationId,
     <SuccessCount>{appResults}={appResults}</SuccessCount>,
      prettifyDate(appResults[0].created)
    ],
    isOpen: false
  });

这是函数 SuccessCount(在非重构代码中,renderSuccessCount 只是在重构版本中重命名为 SuccessCount

    const SuccessCount = (appResults: AppResult[]) => {
    const nSuccesses = appResults.filter((result: AppResult) => result.pulseStatus === SUCCESS).length;
    return Something;
  };

我的问题相对简单,如何将appResults传递到我的功能组件中,我当前重构的代码给了我这个错误

TS2740: Type '{ children: any[]; }' is missing the following properties from type 'AppResult[]': length, pop, push, concat, and 26 more.

这是在林特,我该如何摆脱它?

javascript 反应组件 jslint

评论

0赞 yonBav 12/7/2021
我认为你唯一的问题是你应该去掉第一个括号。它应该像这样 <SuccessCount>appResults={appResults}</SuccessCount>
0赞 Jashwant 12/7/2021
难道不应该将它作为属性而不是子属性传递吗?<SuccessCount appResults={appResults}></SuccessCount>
0赞 Kanishk Anand 12/7/2021
你的 React 组件 / JSX 是返回吗?SuccessCount

答:

1赞 vatz88 12/7/2021 #1

现在它不是一个常规函数,而是一个 react 函数组件,它不会收到常规参数。您必须通过道具访问它们SuccessCount

const SuccessCount = ({appResults}: {appResults: AppResult[]}) => {

同上

const SuccessCount = (props) => {
const {appResults} = props; // or const appResults = props.appResults;
}

用作功能组件

<SuccessCount appResults={appResults} />