打字稿:是否可以将React.Component作为一种类型?

时间:2017-08-03 11:27:05

标签: javascript reactjs typescript

我有以下结构:

java.io.IOException: Server returned HTTP response code: 400 for URL: https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/tasks/255
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
    at com.cloud.task.TaskUpdate.main(TaskUpdate.java:80)

现在我想在实现类中实现export abstract class SomeAbstractClass extends React.Component<any,any>{ protected abstract menuItems: MenuItem[]; } ,例如

menuItems

但编译器抱怨

  

类型'元素'不能分配给'MenuItem'类型。       “元素”类型中缺少属性“setState”。

我该如何使这项工作? this.menuItems = [<MenuItem/>]; // test purpose it has no props 来自哪里?如果我使用setState作为一种类型,它就可以正常工作。

键入内容如下所示,而any是一堆可选字段。

MenuItemProps

来自Material-UI库source

我正在使用Typescript 2.1.5

有可能吗?

1 个答案:

答案 0 :(得分:1)

你在这里混合了两个不同的概念。

首先是你为渲染反应声明的方式和内容。 例如,如果你写:

render()
{
    return <MenuItem/>
}

您所做的就是指示以某种方式创建MenuElement类型的对象并进行渲染。注意 - 您不会在此声明或创建任何MenuItem实例。您只描述了要存档的内容。

其次是反应本身,需要你的&#34;描述&#34;并将其转换为浏览器可以运行并创建所描述行为的实际JS代码。

写作时

this.menuItems = [<MenuItem/>]

React会将其转换为以下内容:

this.menuItems = [React.createElement(MenuItem)]

正如您所看到的,还没有创建MenuItem的实例。

如果您确实希望使用组件的实例,那么可以在稍后阶段(请参阅here更多信息)

你应该尽量不要&#34;存储&#34;渲染之外的元素(如<MenuItem>)。只有在想要描述所需结构时才创建它们。相反,在您的this.menuItems字段中,您应该存储稍后在呈现阶段将帮助您声明必要组件结构的数据。