2017-12-18 63 views
0

我想在屏幕上按下按鈕的同一頁面中使用兩種模式。他們應該依次顯示和隱藏。首先,我需要顯示isModalVisibleConnection模態,然後它應該被關閉,並且應該顯示另一個模態(isModalVisible模態)。最後,isModalVisible模式也應該關閉,應用程序應該被重定向到另一個屏幕。我的代碼下面的按鈕:使用Modal時出現「警告:只能更新已安裝或掛載的組件」

onPress() { 
     this.setState({ isModalVisibleConnection: true ,isModalVisibleMain: true}); 

     LIB.requestAccess().then((response) => { 
     console.log("responsexxxx exit part",response); 
     if(response.requestCode==1) 
      { 
      this.setState({ isModalVisibleConnection: false , isModalVisible: true}); 

       //////Wait for 10 seconds and Redirecting 
       if(this.timer > 0) return; 
       this.timer = setTimeout(() => { 
       //turn off the pop up 

       this.props.navigation.navigate('ParkInBuilding', {user: this.state.passedProps.user, positionState:this.state.passedProps.positionState, parkingState: this.state.passedProps.parkingState, activeSection: 'ParkNewError_0'}); 
       this.timer = null; //not necessary if you are unmounting the component 
       }, 10000); 
      } 
      else { 

       console.log("something wrong!!",response.requestMessage); 

       Alert.alert(
        'Error', 
        response.requestMessage , 

        [ 
        //{text: 'Ask me later', onPress:() => console.log('Ask me later pressed')}, 
        {text: 'OK', onPress:() => this.setState({ isModalVisibleMain: false, isModalVisible: false, isModalVisibleConnection: false })}, 
        //{text: 'OK', onPress:() => console.log('OK Pressed')}, 
        ], 
        { cancelable: false } 
       ) 
      } 
      console.log("responesssssssssss Exit",response); 
      }); 

     } 

在我用下面的方式渲染模式把情態動詞:

<Modal isVisible={this.state.isModalVisibleMain}> 
       <Modal isVisible={this.state.isModalVisible}> 
        <View style={styles.timerContainer}> 
        <Text style={styles.orangeTextBold}>Si prega di passare il{"\n"} cancello di uscita.{"\n"} 
        <Text style={styles.itemBold}>{"\n"} </Text> 
        <Text style={styles.itemBold}>Arrivederci e grazie per aver utilizzato il nostro servizio.{"\n"} 
        </Text> </Text> 
        <Text style={styles.itemBold}> </Text> 
        <CountdownCircle 
        seconds={10} 
        radius={40} 
        borderWidth={8} 
        color="#FABB00" 
        bgColor="#fff" 
        textStyle={{ fontSize: 30 }} 
        onTimeElapsed={() => console.log('Elapsed!')} 
        /> 
        </View> 
        </Modal> 

        <View isVisible={this.state.isModalVisibleConnection}> 
        <View style={styles.loader}> 
        <Text style={styles.ComOrangeTextBold}>{I18n.t('Comunicazione')}</Text> 
        <Text style={styles.ComOrangeTextBold}></Text> 
        <View> 
         <Bars size={30} color="#FABB00" /> 
        </View> 
        </View> 
        </View> 
       </Modal> 

我有一個主模式(isModalVisibleMain),其他情態動詞是在裏面。第二種模式也是作爲一個視圖。我應該提到,當我以不同的方式使用模態(分別使用模態)時,第二模態不會在IOS中顯示。這是該應用以合適的方式顯示兩種模式的唯一方式。 的問題是,當我重定向到下一個屏幕,它讓我看到以下警告:

警告:只能更新安裝或安裝組件。這通常意味着 你叫設定狀態,更換 卸載的組件狀態或強制更新...

的它,因爲鎖定我的應用程序的一些倍。你有什麼想法,我該如何處理這種戰爭? (如果您需要更多代碼或信息,請在帖子後面提及)謝謝

回答

0

setState操作是異步的,並且爲了提高性能而進行批處理。

setState()不會立即改變this.state,但會創建一個 掛起狀態轉換。調用 方法後訪問this.state可能會返回現有值。沒有 保證同步操作對setState的調用,並且調用可能爲 進行批處理以提高性能。

在你的情況,你可能希望可以肯定,你的導航工作將在您的setState結束觸發:

this.setState({isModalVisible:假},()=> this.props .navigation.navigate(...));

相關問題