2017-05-02 30 views
0

我有一個場景使用DatePickerIOS組件。該文檔示例包含一個新的Date()並使用狀態來保存和更新Date值。所以,如果我轉到另一個頁面並返回,時間會改變,我需要重置此值。React Native:DatePickerIOS - 如何從其他頁面返回後保留「Date」值

文件用法:

static defaultProps = { 
    date: new Date() 
    timeZoneOffsetInHours: (-1) * (new Date()).getTimezoneOffset()/60, 
}; 

state = { 
    date: this.props.date, 
    timeZoneOffsetInHours: this.props.timeZoneOffsetInHours, 
}; 

onDateChange(date) { 
    this.setState({date: date}); 
}; 

render(){ 
    return(
      <View style={styles.wrap}> 
       <View style={styles.datePickerIOS}> 
        <DatePickerIOS 
         date={this.state.date} 
         mode="time" 
         timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60} 
         onDateChange={this.onDateChange.bind(this)} 
         minuteInterval={10} 
        /> 
       </View> 

我嘗試使用的道具,堅持這個數據到本地存儲。

static defaultProps = { 
    date: new Date() 
    timeZoneOffsetInHours: (-1) * (new Date()).getTimezoneOffset()/60, 
}; 

state = { 
    date: this.props.date, 
    timeZoneOffsetInHours: this.props.timeZoneOffsetInHours, 
}; 

componentWillMout() { 
    this.props.updateDate(this.props.date) 
} 

onDateChange(date) { 
    this.setState({date: date}); 
    this.props.updateDate(date) 
}; 

render(){ 
    return(
      <View style={styles.wrap}> 
       <View style={styles.datePickerIOS}> 
        <DatePickerIOS 
         date={this.props.alarmConfig.date} 
         mode="time" 
         timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60} 
         onDateChange={this.onDateChange.bind(this)} 
         minuteInterval={10} 
        /> 
       </View> 

updateDate(日期)是一款動作

export function updateDate(date){ 
return { 
    type: "UPDATE_DATE", 
    date: date, 
    } 
} 

export function alarmConfig(state=initialState, action){ 
switch(action.type) { 
    case types.UPDATE_DATE: 
     return { 
      ...state, 
      date: action.date 
     }; 

,如果我不喜歡的是,alarmConfig.date下的值是一個字符串,所以我得到一個錯誤,因爲DatePickerIOS日期的道具需要日期類型。

,如果我只是改變象下面這樣:

<DatePickerIOS 
     date={this.state.date} 
     mode="time" 
     timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60} 
     onDateChange={this.onDateChange.bind(this)} 
     minuteInterval={10} 
/> 

alarmConfig.date下的值是一個日期,同與state.date

什麼原因,到底是什麼造成這種情況呢?以及如何更改代碼以達到我的目的?

謝謝大家。

回答

0
  • 如果你在你的終極版店收藏的日期(如我假設你從上面的代碼做),你確實應該與mapStateToProps映射應用程序狀態您compononent的道具。

參見:http://redux.js.org/docs/basics/UsageWithReact.html#implementing-container-components

  • 沒有理由爲什麼你不能一個Date對象存儲在您的終極版商店,讓你的錯誤alarmConfig.date is a string也許是由初始狀態引起的。你的initialState變量是什麼樣的?

  • 如果仍然需要將日期序列化爲字符串,請查看momentjs.com

相關問題