如何将值赋值给State并在ReactJs中使用带有Typescript的setState

时间:2017-03-02 16:15:30

标签: reactjs typescript

我过去曾在一些测试项目中使用过state和setState,但现在我正在开发一个新项目,当我this.state = new ProductDto("some product name");时,我收到错误" {{ 1}}"

当我也Cannot convert type ProductDto to type {(): any;(): any}时,我收到错误:

this.setState(product); Supplied parameter do not match any signature of call target because no overload accepts one parameters.Candidates are: K<any>() => (void)

我的代码看起来像这样。

K<any>() => (void)

我正在使用class ProductDto { constructor(name?: string) { this.name = name; } name: string; } class Product extends React.Component<any, ProductDto> { constructor() { super(); this.state = new ProductDto("some product name"); } handleChangeProduct(product: ProductDto) { this.setState(product); } ... }

并且setState.ts文件中的setState定义如下所示

typescript: "^2.2.1", @types/react: "^15.0.13" and react": "^15.4.2"

setState<K extends keyof S>(f: (prevState: S, props: P) => Pick<S, K>, callback?: () => any): void;

任何有关如何使这些工作的帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:3)

React状态必须是一个对象。 setState接受一个对象或函数,它返回一个对象作为第一个参数。话虽这么说,状态对象可以包含类(函数)。

在您的情况下,您可以按如下方式设置状态

this.state = { product: new ProductDto("some product name") };

然后更新它

this.setState({ product });

您可以在此处详细了解反应状态:https://facebook.github.io/react/docs/state-and-lifecycle.html