2016-11-08 5 views
15

मूल रूप से, मैं एक घटक प्रतिक्रिया है, इसकी render() समारोह शरीर के रूप में नीचे है:क्या इसका उपयोग करना संभव है यदि ... और ... प्रतिक्रिया में प्रतिक्रिया प्रस्तुत करें?

render(){ 
    return (
     <div> 
      <Element1/> 
      <Element2/> 
      // note: code does not work here 
      if (this.props.hasImage) <MyImage /> 
      else <OtherElement/> 
     </div> 
    ) 
} 
+1

क्या आपको कोई त्रुटि मिलती है? –

+0

हाँ यह एक बहुत ही आम मुद्दा है और एक महान सवाल है! हो सकता है कि यह थोड़ा अलग हो और दिखाए कि आप क्या होता है यह विशेष कोड चलाता है (इसे थोड़ा स्वरूपित करने पर भी विचार करें) वास्तव में इस मुद्दे को साफ़ करने में मदद करेगा। – ZekeDroid

+0

हां, यह गलत है (आदर्श एक)। मैंने इस मुद्दे को दूर करने के लिए अभी सवाल को अद्यतन किया है। धन्यवाद – Xin

उत्तर

34

वास्तव में उस तरह नहीं है, लेकिन वहाँ कामकाज से जुड़े हैं। React's docs में सशर्त प्रतिपादन के बारे में एक अनुभाग है जिसे आपको देखना चाहिए। यहां एक उदाहरण दिया गया है कि यदि आप इनलाइन का उपयोग कर क्या कर सकते हैं।

render() { 
    const isLoggedIn = this.state.isLoggedIn; 
    return (
    <div> 
     {isLoggedIn ? (
     <LogoutButton onClick={this.handleLogoutClick} /> 
    ) : (
     <LoginButton onClick={this.handleLoginClick} /> 
    )} 
    </div> 
); 
} 

आप इसे रेंडर फ़ंक्शन के अंदर भी सौदा कर सकते हैं, लेकिन जेएसएक्स लौटने से पहले।

if (isLoggedIn) { 
    button = <LogoutButton onClick={this.handleLogoutClick} />; 
} else { 
    button = <LoginButton onClick={this.handleLoginClick} />; 
} 

return (
    <div> 
    <Greeting isLoggedIn={isLoggedIn} /> 
    {button} 
    </div> 
); 

यह भी उल्लेखनीय है कि ज़ेकेड्रॉइड ने टिप्पणियों में क्या लाया। यदि आप केवल एक शर्त की जांच कर रहे हैं और कोड का एक विशेष टुकड़ा प्रस्तुत नहीं करना चाहते हैं जो अनुपालन नहीं करता है, तो आप && operator का उपयोग कर सकते हैं।

return (
    <div> 
     <h1>Hello!</h1> 
     {unreadMessages.length > 0 && 
     <h2> 
      You have {unreadMessages.length} unread messages. 
     </h2> 
     } 
    </div> 
); 
+1

प्रस्तुत करने में एक निफ्टी चाल भी जेएस की शॉर्ट सर्किट सुविधा का उपयोग कर रही है! 'IsTrue जैसे कुछ करने से बचने के लिए?

Something
: शून्य 'आप केवल' isTrue &&
Something
' – ZekeDroid

+1

कर सकते हैं इसके अतिरिक्त, आप प्रतिक्रिया के बारे में अधिक [सशर्त प्रस्तुतिकरण] के बारे में जानने के लिए निम्न आलेख देख सकते हैं (https://www.robinwieruch.de/conditional-rendering-react /) अगर अन्य के अलावा। –

0

एक अगर किसी और संरचना के लिए आशुलिपि की उम्मीद काम करता है के रूप में (यह मेरा आदर्श है, जो कि वर्तमान में यह मतलब है काम नहीं करता है) JSX

में

this.props.hasImage ? <MyImage /> : <SomeotherElement>

आप DevNacho के इस ब्लॉग पोस्ट के अन्य विकल्पों को पा सकते हैं, लेकिन यह आशुलिपि के साथ यह करने के लिए और अधिक आम है।

this.setState({overlayHovered: true}); 

renderComponentByState({overlayHovered}){ 
    if(overlayHovered) { 
     return <overlayHoveredComponent /> 
    }else{ 
     return <overlayNotHoveredComponent /> 
    } 
} 

आप this.state से अपने overlayHovered destructure कर सकते हैं: आप अगर खंड आप एक समारोह है कि रिटर्न या घटक एक या घटक बी

उदाहरण के लिए

लिखना चाहिए एक बड़ा करने के लिए की जरूरत है यदि आप इसे पैरामीटर के रूप में देते हैं। फिर अपने प्रस्तुत करना() विधि में है कि समारोह निष्पादित करें:

renderComponentByState(this.state)

0

मई मैं बहुत देर हो चुकी हूं। लेकिन मुझे उम्मीद है कि यह किसी की मदद करेगा। पहले उन दो तत्वों को अलग करें।

renderLogout(){ 
<div> 
    <LogoutButton onClick={this.handleLogoutClick} /> 
<div> 
} 

renderLogin(){ 
<div> 
    <LoginButton onClick={this.handleLoginClick} /> 
<div> 
} 

फिर आप इन कार्यों को अन्य कथन का उपयोग करके फ़ंक्शन प्रस्तुत करने से कॉल कर सकते हैं।

render(){ 
if(this.state.result){ 
    return this.renderResult(); 
}else{ 
    return this.renderQuiz(); 
}} 

यह मेरे लिए काम करता है। :)

संबंधित मुद्दे