当前位置: 首页 > 知识库问答 >
问题:

React(Typescript版本)中导出接口道具的目的是什么

富钧
2023-03-14

在React-Typescript初学者示例“创建组件”的“创建组件”部分中,Typescript中有一个基本的React组件:

// src/components/Hello.tsx

import * as React from 'react';

export interface Props {
  name: string;
  enthusiasmLevel?: number;
}

function Hello({ name, enthusiasmLevel = 1 }: Props) {
  if (enthusiasmLevel <= 0) {
    throw new Error('You could be a little more enthusiastic. :D');
  }

  return (
    <div className="hello">
      <div className="greeting">
        Hello {name + getExclamationMarks(enthusiasmLevel)}
      </div>
    </div>
  );
}

export default Hello;

// helpers

function getExclamationMarks(numChars: number) {
  return Array(numChars + 1).join('!');
}

我是打字新手。似乎Typescript使用接口道具来执行道具类型检查(类似于Proptypes npm包所做的)。因此,问题是:

  1. 如果我已经在使用这种TypeScript接口语法do to props类型检查,我还需要在同一个组件中使用像这样的Proptype包吗?
    import PropTypes from 'prop-types';

    Hello.propTypes = {
      name: PropTypes.string,
      enthusiasmLevel: PropTypes.number
    };

共有1个答案

祁雪峰
2023-03-14

首先,我建议以ES6方式声明组件

const Hello: React.FC<IHello> = ({ name, enthusiasmLevel = 1 }) => {}

您的接口定义了组件的契约/接受的参数

export interface IHello {
  name: string;
  enthusiasmLevel?: number;
}

您正在导出它,因此您可以从其他想要使用Hello组件的文件/组件导入您的接口。例如,您可以从另一个组件中使用您的Hello组件:

const props: IHello = {
    name: "John",
    enthusiamsLevel: 5
}

<Hello {...props} />

如果我已经在使用这种类型的Typescript接口语法do to props type check,那么我还需要在同一个组件中使用Proptypes吗?

您总是希望在TypeScript中使用类型强定义。因此,在另一个组件中声明prop变量时,您不想执行const-props:any={如果您决定稍后更改此组件的接口声明,您将被迫更新使用此接口的所有引用。-您可能需要多使用一个prop变量,在这种情况下,您将需要更新此接口的用法。如果您不习惯键入脚本,这可能看起来非常可怕一开始-但始终具有强类型定义的好处将随着时间的推移而显现。尤其是在更新类型定义时。

 类似资料:
  • 在react中,您可以设置进入组件的道具的道具类型。对于我的一个道具,我希望值为null或一行JSX。React文档没有涵盖JSX应该使用的propType。 在测试时,我发现它在使用对象或元素的propTypes时不会抛出错误。当使用另一个符号(如符号)时,我会得到一个错误,表示它是一个对象。如果它是一个对象,当它是一个元素时,它肯定会抱怨。 JSX的正确类型是什么?

  • 我和同事一起创建了一个Angular 5应用程序。我为我的所有界面创建了一个文件夹,并按功能进行分组。然而,我没有在它们上包含任何导出符号,并且在使用它们时,我从不需要导入它们……它们只存在,不会产生任何编译错误。我喜欢这种方式,因为它使代码更干净,但我只是在利用一些bug吗?我的同事以“正确”的方式完成了它,并且需要在任何时候导入他想要使用的界面。有什么想法吗?您应该如何创建存在于单独文件中的接

  • 我试图理解React的高阶组件结构,但是所有的参考资料都假设您已经理解了在编写:BaseComponent{…this.props}{…this.state}时,spread操作符在高阶组件中的作用。如果组件已经作为道具传入,为什么有必要像这样展开道具?

  • 我一直在阅读React的快速启动文档; 为什么React道具是只读的?

  • 问题内容: 我一直在阅读React的快速入门文档。 无论您将组件声明为函数还是类,都不得修改其自身的道具 这是一个“纯”函数,因为它不尝试更改其输入,并且对于相同的输入始终返回相同的结果: 这是“不纯”函数,因为它更改了自己的输入:https : //codesandbox.io/s/9z38xv4x7r 为什么React道具是只读的? 问题答案: 组件应管理自己的状态,但不应管理自己的道具。本质