我正在尝试使用Office-JS编写Office加载项。有一个Yeoman生成器,它创建样板组件和目录。语法与我惯用的语法完全不同,并且无法为主要组件创建状态。
文件export interface AppProps {
title: string;
isOfficeInitialized: boolean;
}
export interface AppState {
}
export default class App extends React.Component<AppProps, AppState> {
constructor(props, context) {
super(props, context);
}
render() {
<div>
<Body message='Click on the button below to apply formatting' buttonLabel='Format' click={ this.format_workbook } />
</div>
}
带有2个接口和一个类:
Content.tsx
它还带有一个Body.tsx
文件,我将其用于export interface ContentProps {
message: string;
buttonLabel: string;
click: any;
}
export class Body extends React.Component<ContentProps, any> {
constructor(props, context) {
super(props, context);
}
render() {
...
}
}
。它包含一个接口和一个组件:
Body
我现在需要做的是像这样(在App
的{{1}}上)将状态控制的数组传递给render()
:
<Body message='Click on the button below to apply formatting.' buttonLabel='Format' click={ this.format_workbook } console={this.state.messages} />
我尝试过:
在应用程序的构造函数上:
constructor(props, context) {
super(props, context);
this.setState({
messages: [],
})
// alternatively:
this.state = { messages: [] }
}
在AppState
上:
export interface AppState {
messages: string[];
}
和ContentProps
(在Body
中):
export interface ContentProps {
message: string;
buttonLabel: string;
click: any;
console: string[];
}
这些变化的变体。但是,无论我做什么,都会出现类似以下的编译错误:
TS2322: Type '{ message: string; buttonLabel: string; click: () => Promise<void>; messages: string[]; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Body> & Readonly<ContentProps> & Readonly<{ children?: ReactNode; }>'.
Property 'messages' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Body> & Readonly<ContentProps> & Readonly<{ children?: ReactNode; }>'.
在这种情况下,谁能阐明我如何为组件创建状态?