2017-05-02 29 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

相关问题