我已经看过使用Typescript的多个React组件示例:
class Foo extends React.Component<IProps, IState> {}
当我们不使用道具或国家时,似乎没有明确的约定。
人们将这些类型设置为any
,null
,undefined
,{}
, 等。这就是我到目前为止看到过:void
class Foo extends React.Component<null, null> {}
class Foo extends React.Component<any, any> {}
class Foo extends React.Component<{}, {}> {}
class Foo extends React.Component<undefined, undefined> {}
class Foo extends React.Component<void, void> {}
class Foo extends React.Component<object, object> {}
最好的方法是什么?
更新
道具:
void
{}
(https://github.com/Microsoft/TypeScript/issues/15409和https://github.com/Microsoft/TypeScript/issues/15419)
解
简单地做 - class Foo extends React.Component {}
因为道具和州被初始化为{}
答案 0 :(得分:8)
interface Component<P = {}, S = {}> extends ComponentLifecycle<P, S> { }
道具和状态初始化为{}
,因此对于没有州或道具的组件,我们可以简单地执行:
class Foo extends React.Component {}
答案 1 :(得分:5)
根据this guideline和我的exp,我会说:
class Foo extends React.Component<null, null> {}
当你知道你不会收到道具或陈述class Foo extends React.Component<any, any> {}
当你知道你会收到道具和陈述但你真的不在乎他们的样子class Foo extends React.Component<{}, {}> {}
从未见过,似乎很奇怪class Foo extends React.Component<undefined, undefined> {}
与null
相同,由您决定。我经常看到null
而不是undefined
class Foo extends React.Component<void, void> {}
坏主意,因为似乎是为函数返回保留(当你不指望一个时)欢迎其他意见
答案 2 :(得分:2)
我总是为每个组件创建一个道具界面,即使它是空白的。它使事情保持一致,并允许我在以后需要时轻松添加道具。
Interface FooProps { }
class foo extends React.Component<FooProps, any> {
}
答案 3 :(得分:1)
有状态(基于类的组件)&amp;无国界的组件在互联网上有很多关于何时使用这些概念的概念,我已经使用这个列表掌握了这些概念(在有实际经验之前):
<强>无国籍强>
示例:菜单,UserInfo,List,SideBar。
<强>有状态强>
示例:UserPage,FollowersSidebar,ArticlesContainer。
答案 4 :(得分:1)
在回答for this question时,您可以使用React.FC<{}>
类
const MyStatelessComponent : React.FC<{}> = props =>
<div>{props.children}</div>
或者如果你的标记变大:
const MyStatelessComponent : React.FC<{}> = props => {
{/* Some code here */}
return <div>{props.children}</div>
}
答案 5 :(得分:1)
您可以将 VoidFunctionComponent
用于 stateless ans propless 组件(没有 state ana props):
const MyComponent: React.VoidFunctionComponent = () => {
...
}