如何在 React TypeScript 中将函数作为 Props 传递
在 React TypeScript 中将函数作为 props 传递:
- 在组件的接口中定义函数属性的类型。
- 在父组件中定义函数。
- 将函数作为道具传递给子组件。
interface ButtonProps {
sum: (a: number, b: number) => number;
logMessage: (message: string) => void;
// 👇️ turn off type checking
doSomething: (params: any) => any;
}
function Container({sum, logMessage, doSomething}: ButtonProps) {
console.log(sum(10, 15));
logMessage('hello world');
doSomething('abc');
return <div>Hello world</div>;
}
const App = () => {
const sum = (a: number, b: number) => {
return a + b;
};
const logMessage = (message: string) => {
console.log(message);
};
return (
<div>
<Container sum={sum} logMessage={logMessage} doSomething={logMessage} />
</div>
);
};
export default App;
该示例展示了如何使用 TypeScript 将函数作为 props 传递给 React 组件。
sum
函数接受 2 个数字类型的参数并返回一个数字。
logMessage
函数采用字符串参数并且不返回任何内容。
doSomething
函数用于演示如果您不想在将函数作为 props 传递时键入函数,如何关闭类型检查。
any
类型有效地关闭了类型检查,因此函数可以传递任何类型的参数并且可以返回任何类型的值。
如果使用类型别名而不是接口,此语法也有效。
type ButtonProps = {
sum: (a: number, b: number) => number;
logMessage: (message: string) => void;
// 👇️ turn of type checking
doSomething: (params: any) => any;
};
实际函数的类型与我们在 ButtonProps 中指定的类型相匹配非常重要。
如果不匹配,我们会得到一个类型检查错误。
我们可能需要做的一件常见事情是将事件处理函数作为 props
传递。
type ButtonProps = {
handleClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
};
function Container({handleClick}: ButtonProps) {
return <div onClick={handleClick}>Hello world</div>;
}
const App = () => {
const handleClick = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
console.log('element clicked');
};
return (
<div>
<Container handleClick={handleClick} />
</div>
);
};
export default App;
此代码片段与之前的代码片段唯一不同的是事件对象的类型。
类型因元素和事件(例如 onChange、onClick 等)而异。
我们可以通过内联编写处理函数并将鼠标悬停在 IDE 中的事件参数上来确定事件的类型。
interface ButtonProps {
handleClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
}
function Container({handleClick}: ButtonProps) {
// 👇️ wrote event handler inline
return <div onClick={event => console.log(event)}>Hello world</div>;
}
我们内联编写了事件处理函数,并将鼠标悬停在事件参数上以获取其类型。
另一种确定道具类型的好方法是右键单击它,然后在 IDE 中单击“转到定义”。
该示例显示了我们如何右键单击元素的样式属性并确定其类型是 CSSProperties
或 undefined
。
相关文章
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:153 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。
Node.js 与 React JS 的比较
发布时间:2023/03/27 浏览次数:137 分类:Node.js
-
本文比较和对比了两种编程语言,Node.js 和 React。React 和 Node.js 都是开源 JavaScript 库的示例。 这些库用于构建用户界面和服务器端应用程序。
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:181 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:97 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:161 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:221 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。