2016-11-03 7 views
8

अगर मैं कुछ इस तरहएक प्रतिक्रिया stateless कार्यात्मक घटक के प्रवाह वापसी प्रकार क्या है?

const RandomComponent = (props) => (
    <div> 
    <SomeSubComponent id={props.id} /> 
    <AnotherSubComponent type={props.type} /> 
    </div> 
) 

कैसे मैं प्रवाह के साथ वापसी प्रकार व्याख्या टाइप करेगा, जैसे कि, क्या नीचे कोड में /* ??? */ की जगह चाहिए?

const RandomComponent = (props: { id: string, vino: number): /* ??? */ => (
    <div> 
    <SomeSubComponent id={props.id} /> 
    <AnotherSubComponent veryImportantNumber={props.vino} /> 
    </div> 
) 

संपादित करें: This फ्लो डॉक्स क्या राज्यविहीन कार्यात्मक घटकों के बारे में क्या कहना है है। मैं अंधेरा हो सकता हूं, लेकिन मैं वहां वापसी प्रकार के बारे में कुछ नहीं देख सकता, केवल प्रो प्रकार।

+0

वापसी का प्रकार? यह एक घटक है, तो क्या आप हमेशा इसके तत्व वापस नहीं करेंगे? –

+1

मैं इसे अन्य फ़ंक्शन घोषणाओं के साथ स्थिरता के कारण करना चाहता हूं और क्योंकि कभी-कभी कोई घटक 'शून्य' या घटक वापस कर सकता है, लेकिन सवाल वास्तव में संक्षेप में से एक है, और मुझे लगता है कि यह वास्तव में है "एक प्रकार का प्रकार क्या है जेएसएक्स ब्लॉक/React.createElement का रिटर्न प्रकार? " – ahstro

उत्तर

7

एक शुद्ध घटक के वापसी प्रकार होगा (जो एक सामान्य घटक के render फ़ंक्शन का एक ही प्रकार है) ?React$Element<any> है।

आप its definitionReact$Element में पढ़ सकते हैं के रूप में एक प्रकार पैरामीटर Config जो बहुत उपयोगी से प्रति नहीं दे रहा है और यह वहाँ केवल ReactClass की परिभाषा के साथ स्थिरता के लिए है।

तो अपनी परिभाषा के रूप में

const RandomComponent = (props: { id: string, vino: number }): React$Element<any> => (
    <div> 
    <SomeSubComponent id={props.id} /> 
    <AnotherSubComponent veryImportantNumber={props.vino} /> 
    </div> 
) 

लिखा जा सकता है या यदि आप पसंद

import type { Element } from 'react' 

const RandomComponent = (props: { id: string, vino: number }): Element<any> => (
    <div> 
    <SomeSubComponent id={props.id} /> 
    <AnotherSubComponent veryImportantNumber={props.vino} /> 
    </div> 
) 

या यहाँ तक कि

import React from 'react' 

const RandomComponent = (props: { id: string, vino: number }): React.Element<any> => (
    <div> 
    <SomeSubComponent id={props.id} /> 
    <AnotherSubComponent veryImportantNumber={props.vino} /> 
    </div> 
) 
0

बाहर कर देता है यह React.Element है, जो है एक polymorphic type (जो मैं 100% यकीन है कि इसका क्या मतलब नहीं कर रहा हूँ), इसलिए सही (पर्याप्त) कोड

const RandomComponent = (props: { id: string, vino: number): React.Element<*> => (
    <div> 
    <SomeSubComponent id={props.id} /> 
    <AnotherSubComponent veryImportantNumber={props.vino} /> 
    </div> 
) 
+0

कृपया ध्यान दें कि 'प्रतिक्रिया। एलिमेंट' मान्य प्रकार नहीं है। वास्तविक प्रकार जिसका आप उपयोग कर सकते हैं वह 'एक्टिव 0 एलिमेंट <*>' है। –

+0

मुझे पहले 'रिएक्ट $ एलिमेंट' मिला, लेकिन फिर मैंने [प्रवाह का स्रोत कोड] (https://github.com/facebook/flow/blob/e6f6386f1e0c775bd9795bb7ed43a22f555948d9/tests/react_modules/createclass-module.js#L9) देखा और पाया गया कि इसे 'प्रतिक्रिया' एलिमेंट 'के रूप में उपयोग किया जा रहा है। कोई विचार क्यों? – ahstro

+0

दिलचस्प। मुझे लगता है कि अगर आप 'प्रतिक्रिया' आयात किया जाता है तो आप इसका उपयोग कर सकते हैं तो –

0

अपने .flowconfig के आधार पर, वापसी प्रकार के रूप में React$Element<any> की स्थापना कर सकते हैं निम्न त्रुटि फेंक दें:

error Unexpected use of weak type "any" flowtype/no-weak-types

इससे बचने के लिए, या तो सभी में कोई प्रकार पारित:

type PropsType = { foo: string } 

const Baz = (props: PropsType): React$Element => 
    <h1>Hello, { props.foo }</h1> 

या, any के बजाय, एक props प्रकार उर्फ ​​पारित: क्यों आप निर्दिष्ट करने के लिए चाहते हैं

type PropsType = { foo: string } 

const Baz = (props: PropsType): React$Element<PropsType> => 
    <h1>Hello, { props.foo }</h1> 
संबंधित मुद्दे