Pet*_*ner 7 typescript reactjs
我需要从 React 的功能组件中引用静态方法。我在这里做了一个我想做的小例子(它在 JavaScript 中工作)。我得到的错误在第 10 行 const x = ...
TS2339:“FunctionComponent”类型上不存在属性“GetMyArray”。
import React, {FunctionComponent} from 'react';
interface Props {
isLoading?: boolean,
}
const Speakers : FunctionComponent<Props> = ({isLoading}) => {
if (isLoading) {
const x = Speakers.GetMyArray();
return (
<div>{JSON.stringify({x})}</div>
);
} else {
return <div></div>;
}
};
Speakers.GetMyArray = () => {
return [1,2,3,4]
};
export default Speakers
Run Code Online (Sandbox Code Playgroud)
小智 6
使用类组件会更容易做到这一点,因为static可以在类定义中推断函数和属性类型。
class Speakers extends React.Component<Props> {
static GetMyArray = () => [1, 2, 3, 4]
render() {
const { isLoading } = this.props
if (isLoading) {
const x = Speakers.GetMyArray(); // works great
return (
<div>{JSON.stringify({x})}</div>
);
} else {
return <div></div>;
}
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,您可以扩展React.SFC或使用交集类型:
const Speakers: React.SFC<Props> & { GetMyArray?: () => number[]; } = (props) => {
const { isLoading } = props
if (isLoading) {
const x = Speakers.GetMyArray!(); // works, sorta
return (
<div>{JSON.stringify({x})}</div>
);
} else {
return <div></div>;
}
}
Run Code Online (Sandbox Code Playgroud)
您必须将其标记GetMyArray为可选,因为您不能在定义函数的同时定义它,因此!在调用静态函数时必须使用运算符(或检查该函数是否存在)。in告诉类型检查器您知道自己在做什么,但事实!并非如此。请参阅此处了解非空断言运算符Speakers.GetMyArray!();GetMyArrayundefined
我没有看到 usingReact.FC现在是使用函数组件的首选方式,因为函数组件不再被认为是无状态的。
如果您可以只使用 TypeScript,const Speakers = (props: Props) => ...那么将 TypeScript 升级到 3.1 可能是您最好的选择!
我的回答并不完全符合你的问题。但我认为对于想要向功能组件添加静态组件的人来说会有帮助。
import React from 'react';
import { Text } from 'react-native';
import Group, { RadioButtonGroupProps } from './Group';
type RadioButtonType = {
text: string,
};
interface StaticComponents {
Group?: React.FC<RadioButtonGroupProps>
}
const RadioButton: React.FC<RadioButtonType> & StaticComponents =
({ text }) => (<Text>{text}</Text>);
RadioButton.Group = Group;
export default RadioButton;
Run Code Online (Sandbox Code Playgroud)
如果你想直接而不是记住这样的配置import React from 'react'import * React from 'react'
成就:
| 归档时间: |
|
| 查看次数: |
8178 次 |
| 最近记录: |