2017-03-02 13 views
1

これまでいくつかのテストプロジェクトでstateとsetStateを使用していましたが、今は新しいプロジェクトに取り組んでいます。this.state = new ProductDto("some product name");エラー "Cannot convert type ProductDto to type {(): any;(): any}"です。ReactJsでtypescriptを使用してsetStateを状態に割り当てる方法

とiも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); 
    } 
    ... 
} 

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

を使用していますが、SETSTATEの定義はindex.d.tsでこのように見えますが

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

setState<K extends keyof S>(state: Pick<S, K>, callback?:() => any): void;を提出します。

これらの作業をどのようにするかについてのヘルプは高く評価されます。ありがとうございます。

+2

をReactがどのように状態を処理するかというと、非定型で問題の可能性があります...代わりに、インタフェースとオブジェクトリテラルを使用するだけです。おそらく '{product:ProductDto}'をあなたの国家として使うことができます。 – Aaron

+0

'this.state'に明白なオブジェクトを提供します。 –

+0

@Aaron私はまた、インターフェイスとオブジェクトリテラルを使用しようとしましたが、それは助けになりませんでした。 –

答えて

2

リアクション状態はオブジェクトでなければなりません。 setStateは、オブジェクトまたは第1パラメータとしてオブジェクトを返す関数を受け入れます。つまり、状態オブジェクトはクラス(関数)を含むことができます。

あなたはそれがあなたの詳細を読むことができ

this.setState({ product }); 

はここ状態に反応更新し

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

を次のように状態を設定することができた場合に:状態はあるとしてクラスを使用https://facebook.github.io/react/docs/state-and-lifecycle.html

関連する問題