2017-10-17 19 views
0

Reactコンポーネントから継承し、新しいPropsを定義します。そのような何か(Barとエラーの多くを持って、完全に間違っている必要があります):flowtype:継承と総称

私は、継承と流れジェネリックを使用する必要がありますどのように
// @flow 

class Component<Props> { 
    props: Props; 

    constructor(props: Props) { 
     this.props = props; 
    } 
} 

type FooProps = { 
    x: number; 
} 

class Foo extends Component<FooProps> { 
    _render(value: string) { 
     return `hello, ${value}`; 
    } 
    render() { 
     return this._render(`${this.props.x}`); 
    } 
}; 

type BarProps = { 
    x: number; 
    y: number; 
} 

class Bar extends Foo<BarProps> { 
    render() { 
     return this._render(`${this.props.x} ${this.props.y}`); 
    } 
} 

const foo: Foo = new Foo({x: 1}); 
const bar: Bar = new Bar({x: 1, y: 2}); 

? (それが重要であれば、Reactコンポーネントの文脈で)。

フロー0.57.2を使用し、16.0.0と反応させます。新しいを作成

+0

継承ではどういう意味ですか? 'React'の場合、継承はコンポーネントをタイプするときに役割を果たしません。 'PropType'と同じように' props'を入力するだけです。 –

+0

つまり 'Bar'は' Foo'を拡張し、 'Bar'は' props'のタイプを変更します。もう一度考えてみよう... –

答えて

0

最も単純なケースでは、コンポーネントを反応しpropsを入力すると、ESで次のようになります。

// @flow 
import React from 'react' 

type Props = { books: Array<String>, search: (string) => void } 

class SearchList extends React.Component { 
    static defaultProps: Props 
    props: Props 

    render() { /*...*/ } 
} 

SearchList.defaultProps = { books: [], search: (_) => undefined } 

EDIT:これがあなたの場合は、ステージ3であるclass fields提案を使用している言及するのを忘れてしまいましたcreate-react-appのようなブートストラップを使用しています。それ以外の場合は、次の操作を実行できます。

// @flow 
import React from 'react' 

type Props = { books: Array<String>, search: (string) => void } 

class SearchList extends React.Component<Props> {  
    render() { /*...*/ } 
} 
+0

これは、「エラー」(フロー0.57.2&リアクション16):プロパティ 'Component'を与えます。型引数が少なすぎます。だからこそ私はここに記載されているようにしようとしています https://flow.org/en/docs/react/components/ –

+0

最初の例では、新しいクラスフィールドを使用しています。それらにアクセスするには、 'babel'プラグインを使う必要があります。 2番目のものは、 –

+0

がなければ動作しますが、 'babel'プラグインを使用する必要があり、その出力を' flow'に渡す必要がありますか? –