在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包所做的)。因此,问题是:
import PropTypes from 'prop-types';
Hello.propTypes = {
name: PropTypes.string,
enthusiasmLevel: PropTypes.number
};
首先,我建议以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的正确类型是什么?
React文档中说:
我和同事一起创建了一个Angular 5应用程序。我为我的所有界面创建了一个文件夹,并按功能进行分组。然而,我没有在它们上包含任何导出符号,并且在使用它们时,我从不需要导入它们……它们只存在,不会产生任何编译错误。我喜欢这种方式,因为它使代码更干净,但我只是在利用一些bug吗?我的同事以“正确”的方式完成了它,并且需要在任何时候导入他想要使用的界面。有什么想法吗?您应该如何创建存在于单独文件中的接
我试图理解React的高阶组件结构,但是所有的参考资料都假设您已经理解了在编写:BaseComponent{…this.props}{…this.state}时,spread操作符在高阶组件中的作用。如果组件已经作为道具传入,为什么有必要像这样展开道具?
我一直在阅读React的快速启动文档; 为什么React道具是只读的?
问题内容: 我一直在阅读React的快速入门文档。 无论您将组件声明为函数还是类,都不得修改其自身的道具 这是一个“纯”函数,因为它不尝试更改其输入,并且对于相同的输入始终返回相同的结果: 这是“不纯”函数,因为它更改了自己的输入:https : //codesandbox.io/s/9z38xv4x7r 为什么React道具是只读的? 问题答案: 组件应管理自己的状态,但不应管理自己的道具。本质