如何在React / Typescript项目中使用状态

时间:2019-04-04 12:13:14

标签: reactjs typescript react-native

我正在尝试使用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; }>'.

在这种情况下,谁能阐明我如何为组件创建状态?

0 个答案:

没有答案