2016-10-14 11 views
7

मैंने एक अजीब व्यवहार देखा कि अगर मॉडल खुद को पेश करेगा और उसके बाद शीर्ष पर दिखाई देगा, तो अलर्ट दिखाई देने पर, अलर्ट बहुत जल्द गायब हो जाता है यह और मॉडल, भले ही प्रोग्रामेटिक रूप से हटाया गया हो, स्क्रीन से नहीं हटाया जाता है। मुझे लगता है कि एक बग है। क्या आसपास कोई काम है?प्रतिक्रियात्मक मूल: जब इसके ऊपर अलर्ट दिखाई देता है तो मॉडल छिपा नहीं होता है

उत्तर

4

यह प्रतिक्रिया मूल में एक परेशानी प्रतीत होता है। मैं भी इस मुद्दे से मुलाकात की है। इसे ठीक करने के लिए सबसे आसान तरीका के बाद मोडल छिपा हुआ है टाइमआउट के साथ चेतावनी कॉल करने के लिए है: ... setTimeout(() => Alert.alert(msg), 10); ...

+0

समस्या यह है कि अलर्ट किसी भी समय प्रकट हो सकता है, यह निर्भर नहीं है कि कौन सा पृष्ठ खुला है। यह समाधान सराहनीय है जब मॉडर्ट के राज्य के ज्ञान के आधार पर चेतावनी का सख्ती से उपयोग किया जा रहा है। –

5

हाँ, मुझे ऐसा लगता है कि यह एक प्रतिक्रिया देशी के बग होना चाहिए, मेरे कोड प्रतिक्रिया देशी 0.33 से ठीक काम करता है, के बाद 0.37 पर अपग्रेड करें, फिर उसी समस्या से मुलाकात की। https://github.com/facebook/react-native/issues/10471#issuecomment-262450975, आशा है कि आप मदद कर सकते हैं:


मैं के बाद मैं 0.37 करने के लिए 0.33 से प्रतिक्रिया देशी उन्नत बनाया समान समस्या से मुलाकात की

निम्न सामग्री प्रतिक्रिया देशी GitHub अंक में मेरी टिप्पणी है। मैं मॉडल को बंद करने के बाद एक अलर्ट संवाद दिखाना चाहता हूं, लेकिन ऐल पुनः लोड करने के बाद भी मॉडल गायब नहीं होता है, और ऐप को फिर से लोड करने के लिए cmd + R का उपयोग करें। केवल आईओएस में, और यह प्रतिक्रिया-मूल 0.33 द्वारा ठीक काम करता है।

renderModal() { 
    return (
    <Modal 
     animationType = 'fade' 
     transparent={true} 
     visible={this.state.isProcessing} 
     onRequestClose={()=>{}}> 
     <View style={styles.modalContainer}> 
     <LoadingSpiner size='large' color='white' styleAttr='Normal'/> 
     </View> 
    </Modal> 
) 
} 

_pressNext() { 
    // display a Modal with a spinner 
    this.setState({isProcessing: true}} 

    // network request 
    // ... 
} 

componentWillReceiveProps(nextProps) { 
    // ... 

    // to hide the Modal with a spinner 
    this.setState({isProcessing: false}) 
    Alert.alert('title', 'Something has done!', [ 
     { text: 'Got it', onPress:() => {} } 
    ]) 
    } 
} 

तो मैं इसे हल करने के लिए setTimeout इस्तेमाल करने की कोशिश, कोड निम्नलिखित पसंद करती है:

कोड निम्नलिखित पसंद करती है

componentWillReceiveProps(nextProps) { 
    // ... 

    // to hide the Modal with a spinner 
    this.setState({isProcessing: false}) 
    setTimeout(() => { 
     // this log will output 
     console.log("show alert") 
     // but Alert doesn't display 
     // sometimes it will display occasionally 
     Alert.alert("title", "msg") 
    }, 200) 
} 

तो मोडल गायब हो जाएगा, लेकिन, सूचना संवाद प्रदर्शित नहीं कर सकता !!!

मैं भी setState कॉलबैक में रन setTimeout की कोशिश की, इस तरह:

this.setState({isProcessing: false},() => { 
    setTimeout(() => { 
    Alert.alert("title", "msg") 
    }, 200) 
} 

लेकिन एक ही परिणाम, सूचना संवाद अभी तक पॉप अप नहीं करता है।

आखिरकार, मैं चेतावनी संवाद बंद करने के बाद मॉडल को छिपाने का फैसला करता हूं, और यह काम करता है! कोड निम्नलिखित पसंद करता है:

Alert.alert("title", "msg", [ 
    { text: "OK", onPress:() => { this.setState({ isProcessing: false } }  
]) 
संबंधित मुद्दे