Dha*_*era 3 typescript reactjs react-hooks
我正在尝试在使用 React Hooks 和 Styled 组件的 React Typescript 项目中创建自定义按钮组件。
// Button.tsx
import React, { MouseEvent } from "react";
import styled from "styled-components";
export interface IButtonProps {
children?: React.ReactNode;
props?: any;
onClick?:
| ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void)
| undefined;
}
const Button: React.FC<IButtonProps> = ({
children,
onClick = () => {},
...props
}) => {
const handleOnClick = (e: MouseEvent<HTMLButtonElement>) => {
onClick(e);
};
return (
<ButtonStyles onClick={handleOnClick} {...props}>
{children}
</ButtonStyles>
);
};
export default Button;
const ButtonStyles = styled.button``;
Run Code Online (Sandbox Code Playgroud)
这是我想使用自定义按钮的组件
// Login.tsx
import React from "react";
import Button from "../../components/Generic/Button/Button";
const Login: React.FC = () => {
const clickMe = () => {
console.log("Button Clicks");
};
return (
<div>
<Button onClick={clickMe}>My Button</Button>
</div>
);
};
export default Login;
Run Code Online (Sandbox Code Playgroud)
我想单击我的自定义按钮并在单击它时打印控制台日志消息。但我收到以下错误。如何解决这个问题?
Argument of type 'MouseEvent<HTMLButtonElement, MouseEvent>' is not assignable to parameter of type 'MouseEvent<HTMLButtonElement, MouseEvent<Element, MouseEvent>>'.
Type 'MouseEvent' is missing the following properties from type 'MouseEvent<Element, MouseEvent>': nativeEvent, isDefaultPrevented, isPropagationStopped, persist TS2345
16 | }) => {
17 | const handleOnClick = (e: MouseEvent<HTMLButtonElement>) => {
> 18 | onClick(e);
| ^
19 | };
20 | return (
21 | <ButtonStyles onClick={handleOnClick} {...props}>
Run Code Online (Sandbox Code Playgroud)
小智 6
您的接口IButtonProps定义了预期的签名onClick
onClick?:
| ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void)
| undefined;
Run Code Online (Sandbox Code Playgroud)
然而,e参数 的handleClick定义不同:MouseEvent<HTMLButtonElement>
如果您更改 onClick 签名以匹配您的handleClick定义,这可能会以某种方式解决它?
onClick?:
| ((event: React.MouseEvent<HTMLButtonElement>) => void)
| undefined;
Run Code Online (Sandbox Code Playgroud)
import * as React from "react";
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}
/**
* Button.
*
* @param {ButtonProps} props button's props
* @returns {React.ReactElement<ButtonProps>} Button.
*/
export function Button(props: ButtonProps): React.ReactElement<ButtonProps> {
const { children, ...rest } = props;
return (
<button
{...rest}
>
{children}
</button>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10992 次 |
| 最近记录: |