2017-01-06 30 views
2

React.Component에서 상속받은 BaseComponent가 있습니다. 앱의 다른 모든 구성 요소는 BaseComponent에서 상속됩니다. 나는 BaseComponent을 입력해야합니다. 그로부터 상속받은 다른 구성 요소는 Flow에 의해 React 구성 요소로 처리됩니다. 현재 내가 가지고있는 것 :흐름 유형 정보를 잃지 않고 사용자 정의 반응 구성 요소로부터 상속을 얻으려면 어떻게해야합니까?

class BaseComponent<P, S> extends React.Component<$Shape<P>, P, S> { 
    ... 
} 

class OtherComponent extends BaseComponent { 
    props: {}; 
    state: {}: 
    ... 
} 

여기에 working example입니다. 흐름은 OtherComponent에서 소품, 주 등을 올바르게 점검합니다. BaseComponent에서

그러나, 나는 모호한 오류를 얻을 :

  1. S: This type is incompatible with 'undefined. Did you forget to declare S?

  2. P: This type is incompatible with 'undefined. Did you forget to declare P?

  3. Did you forget to declare some incompatible instantiation of S ?: This type is incompatible with 'some incompatible instantiation of S '

,536,913에게

오류 메시지를 이해하는 데 어려움을 겪고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

'BaseComponent'를'P'와'S'로 매개 변수화했습니다. 'BaseComponent'를 확장 할 때 값을 제공해야합니다. https://flowtype.org/docs/classes.html#polymorphic-classes를 참조하십시오. –

+0

@FelixKling 감사합니다! 형식 값을 전달하고 있습니다. 문제를 설명하는 flowtype.org/try 예제를 추가했습니다. 명확히하기 위해, 내가하고있는 것은 흐름이'OtherComponent'를 올바르게 입력하도록하지만,'BaseComponent'에 대한 에러를 보여줍니다. 작업 예제를 참조하십시오. – alden

답변

2

이 나를 위해 작동합니다

class BaseComponent<D, P, S> extends React.Component<D, P, S> { 
    static defaultProps: D 
    props: P 
    state: S 
    yourCustomFunction(): void 
} 

class You extends BaseComponent<any, any, any> { 
    --- component body --- 
} 
+0

아, 흥미 롭습니다. 'BaseComponent'에서 props/state/defaultProps를 반복하면 문제가 해결됩니다. 그러나 클래스'You '의' alden

0

을 실험 많은 양의 후 내가 함께 결국 무엇을이. 제대로 작동하려면 나타납니다

class BaseComponent<Props:Object, State, DefaultProps: $Shape<Props>> extends React.Component<DefaultProps, Props, State> { 
    static defaultProps: $Abstract<DefaultProps>; 
    props: Props; 
    state: $Abstract<State>; 
} 

키는 React.Components에 이르기까지 종류 PARAMS을 전달하는 것 외에도 baseComponent에 소품/주 /과 defaultProps을 정의하는 것이 었습니다. 왜 이것이 필요한지 잘 모르겠지만 문제는 해결됩니다.

+0

답변에 직접 관련 코드를 포함해야합니다. –