Javascript React Native:DatePickerIOS-如何保持;日期“;从其他页面返回后的值

Javascript React Native:DatePickerIOS-如何保持;日期“;从其他页面返回后的值,javascript,react-native,Javascript,React Native,我有一个场景使用DatePickeros组件。文档示例初始化一个新日期(),并使用状态保存和更新日期值。因此,如果我转到另一页并返回,时间将改变,我需要重置此值 文件用途: static defaultProps = { date: new Date() timeZoneOffsetInHours: (-1) * (new Date()).getTimezoneOffset() / 60, }; state = { date: this.props.date,

我有一个场景使用DatePickeros组件。文档示例初始化一个新日期(),并使用状态保存和更新日期值。因此,如果我转到另一页并返回,时间将改变,我需要重置此值

文件用途:

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>
如果我这样做,alarmConfig.date下的值是一个字符串,因此我得到一个错误,因为DatePickerIOS date属性需要一个日期类型

如果我只是改变如下:

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

alarmConfig.date下的值是日期,与state.date相同

造成这种情况的原因是什么?如何更改代码以达到我的目标

谢谢大家。

  • 如果您将日期存储在redux存储中(就像我从上面的代码中假设的那样),那么您确实应该使用
    mapStateToProps
    将应用程序状态映射到组件的道具
见:

  • 没有理由不能在Redux存储中存储
    Date
    对象,因此错误
    alarmConfig.Date是字符串
    可能是由初始状态引起的。您的
    initialState
    变量是什么样子的

  • 如果仍然需要将日期序列化为字符串,请查看

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
        };
<DatePickerIOS
      date={this.state.date}
      mode="time"
      timeZoneOffsetInMinutes={this.state.timeZoneOffsetInHours * 60}
      onDateChange={this.onDateChange.bind(this)}
      minuteInterval={10}
 />