【发布时间】:2020-04-08 11:10:52
【问题描述】:
我正在尝试设置一个typescript-react-eslint 项目,但无法通过此样板组件的 eslint 错误:
import * as React from "react";
interface ButtonProps {
children?: React.ReactNode,
onClick?: (e: any) => void,
}
const styles = {
border: "1px solid #eee",
borderRadius: 3,
backgroundColor: "#FFFFFF",
cursor: "pointer",
fontSize: 15,
padding: "3px 10px",
margin: 10
};
const Button: React.FunctionComponent<ButtonProps> = props => (
<button onClick={props.onClick} style={styles} type="button">
{props.children}
</button>
);
Button.defaultProps = {
children: null,
onClick: () => {}
};
export default Button;
错误是:
19:26 error 'onClick' is missing in props validation react/prop-types
20:12 error 'children' is missing in props validation react/prop-types
似乎是在抱怨 html <button> 的接口未定义?
否则它可能是Button 组件本身,但它不应该从我通过那里的<ButtonProps> 接口获取类型信息吗?
我尝试像这样显式设置children 和onClick:
Button.propTypes = {
children?: React.ReactNode,
onClick?: (e: any) => void
};
它绕过了 eslint 错误,但组件本身停止工作。 我做错了什么?
附:这是我的.eslintrc.json
{
"env": {
"browser": true,
"commonjs": true,
"es6": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/eslint-recommended"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"settings": {
"react": {
"pragma": "React",
"version": "detect"
}
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 2018,
"sourceType": "module"
},
"plugins": [
"react",
"@typescript-eslint"
],
"rules": {
"indent": [
"error",
2
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"double"
],
"semi": [
"error",
"always"
]
}
}
【问题讨论】:
-
在参数
<ButtonProps> = ({ onClick: () => {}, children: null }) => (中使用默认值 -
您不需要在
ButtonProps中定义children,因为React.FunctionComponent<T>已经将其定义为:children?: ReactNode。此外,您可以使用React.FC而不是非常冗长的React.FunctionComponent -
如果我没有在
ButtonProps中定义孩子,则不会有任何变化:错误仍然会抱怨children和onClick。const Button: React.FC<ButtonProps> = props => ...中似乎忽略了该接口
标签: reactjs typescript eslint