2017-06-20 10 views
1

Ich versuche, DatePickerAndroid in React Native verwenden.Wie React verwenden Native DatePickerAndroid

De Funktion ist wie folgt:

showAndroidDatePicker = async() => { 
     try { 
      const {action, year, month, day} = await DatePickerAndroid.open({ 
       date: this.state.selectedValue 
      }); 
      if (action !== DatePickerAndroid.dismissedAction) { 
       var date = new Date(year, month, day); 
       this.setState({selectedValue: date.toLocaleDateString()}); 
      } 
     } catch ({code, message}) { 
      console.warn('Cannot open date picker', message); 
     } 
    }; 

render Funktion ist wie folgt:

render() { 
     let numbers = []; 
     for(var i=0; i<=this.props.max; i++) numbers.push((i + '')); 
     return (
      <View> 
       {this.renderModal()} 
       <ItemDetail selectItem={this.selectItem.bind(this)} resetItem={this.resetItem.bind(this)} title={this.props.title} value={formatDate(this.props.value)} icon={this.props.icon} /> 
      </View> 
     ) 
    } 

Und machen modale Funktion wie folgt:

renderModal() { 
     if(!this.state.itemPickerVisible) return; 

     let datePicker = <DatePickerIOS date={this.state.selectedValue} mode="date" timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60} onDateChange={(date) => { this.setState({selectedValue: date})}} />; 
     if (Platform.OS === "android"){ 
      datePicker = this.showAndroidDatePicker() 
     } 

     return(
      <Modal animationType="fade" transparent={true} visible={this.state.itemPickerVisible}> 
       <View style={{flex: 1, flexDirection: 'column', justifyContent: 'flex-end'}}> 
        <View style={{flex: 1, backgroundColor: '#000', opacity: 0.4}}> 
        </View> 
        <View style={{backgroundColor: '#fff'}}> 
         <View style={{backgroundColor: '#ddd', flexDirection: 'row', justifyContent: 'space-between', padding: 7}}> 
          <Text style={{padding: 4}}>{this.props.title}</Text> 
          <TouchableHighlight onPress={this.selectedItem.bind(this)}> 
           <Text style={{padding: 4, color: s.colorDark}}>{gettext("Done")}</Text> 
          </TouchableHighlight> 
         </View> 
         <View>        
          {datePicker} 
         </View> 
        </View> 
       </View> 
      </Modal> 
     ) 
    } 

Aber wenn die renderModal Bedürfnisse gerendert bekomme ich einen Fehler:

enter image description here

Antwort

1

Wenn Platform.OS === "android", die datePicker Variable enthalten, was von showAndroidDatePicker zurückgegeben wird, momentan nichts (eigentlich undefined). Um plattformspezifische Kommissionierer anzuzeigen, können Sie das folgende innerhalb des modalen verwenden:

<View> 
    {Platform.OS === 'ios' ? 
    <DatePickerIOS date={this.state.selectedValue} mode="date" timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60} onDateChange={(date) => { this.setState({selectedValue: date})}} /> : 
    null 
    } 
</View> 

und rufen showAndroidDatePicker z.B. in componentDidMount.

+0

Danke, aber das ist nicht die Antwort, die ich suchte. Ich weiß, wie plattformspezifische Auswahl angezeigt wird, aber ich habe ein Problem mit Android-Picker. Ihre Antwort ist keine Antwort auf meine Frage. Ich habe gefragt, wie man androidPicker benutzt, aber das sehe ich hier nicht. – Boky

+0

Haben Sie versucht, 'showAndroidDatePicker' von' componentDidMount' aufzurufen? Sie versuchen derzeit, das Ergebnis von imperativem Code innerhalb der deklarativen jsx zu verwenden, was nicht funktioniert. Wie vorgeschlagen, versuchen Sie, alle android-bezogenen Sachen von 'renderModal' zu entfernen und den android-Picker auf dem Komponenten-Mount aufzurufen. Lassen Sie mich wissen, wenn das Sie vorwärts bringt – NiFi

+0

Ich bekomme den gleichen Fehler! Wie hast du es gelöst? – Aayushi

Verwandte Themen