作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
也许一个愚蠢的问题,但为什么这个错误 TS2339?!
import * as React from 'react';
import StyledButton from './Button.styled';
interface ButtonProps {
label?: String;
onClick?: (e: React.SyntheticEvent) => any | Function;
whyDidYouRender?: any;
}
const Button: React.FC<ButtonProps> = (props: ButtonProps) => {
return (
<StyledButton onClick={props.onClick}>
{props.label}
</StyledButton>
)
};
Button.whyDidYouRender = true;
export default Button;
Button.whyDidYouRender = true;
最佳答案
编辑:
现在我了解了您的用例,这是一个更简单的答案。将您执行任务的行更改为
(Button as any).whyDidYouRender = true
这将让您设置一次属性,否则将其视为常规功能组件。
Button: ButtonProps
,但 Button 被声明为
Button: React.FC<ButtonProps>
.
FC<ButtonProps
是简称
(props: ButtonProps) => React.Node
// (this is slightly simplified)
这意味着它是一个接受类型为
ButtonProps
的 props 对象的函数并返回一个 React 节点(粗略地说,是一个 html 元素的表示,如按钮)。
props.label
和
props.onClick
,你做的。您也可以访问
props.whyDidYouRender
在函数体内。
props
中。 ,不上
Button
功能。
const Button: React.FC<ButtonProps> = (props: ButtonProps) => {
return (
<StyledButton onClick={props.onClick}>
{props.label}
// You can do this, because props: ButtonProps
{props.whyDidYouRender}
</StyledButton>
)
};
// FC<ButtonProps> doesn't have a whyDidYouRender property, so this fails.
Button.whyDidYouRender = true;
如果您想访问
whyDidYouRender
在函数内部,您应该将其作为 Prop 传递。
Button.whyDidYouRender = true
要成功,您可以更改
Button
的类型.
Button: React.FC<ButtonProps> & {whyDidYouRender: any} = (props) => ...
这可能不是你真正想要做的,但从这个例子中并不清楚你想要完成什么,所以这是我能做的最好的。
关于reactjs - TS2339 : Property 'whyDidYouRender' does not exist on type 'FC<ButtonProps>' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867121/
也许一个愚蠢的问题,但为什么这个错误 TS2339?! import * as React from 'react'; import StyledButton from './Button.style
我是一名优秀的程序员,十分优秀!