2017-07-31 65 views
0

目前有一个问题,我想根据'componentdidupdate'更新道具。但是每次我调用这个函数(onUpdateSelectedDate),口口声声说'x'未定义 - 反应地图分派到道具

onUpdateSelectedDate没有定义

我曾尝试以下:

onUpdateSelectedDate(toggledDate) 


this.onUpdateSelectedDate(toggledDate) 


this.props.onUpdateSelectedDate(toggledDate) 

,仍然不清楚为什么我收到这错误。

代码如下

import DayPicker from "react-day-picker" 
import React, {Component} from 'react' 
import './calendarDatePicker.scss' 
import propTypes from 'prop-types' 
import { connect } from 'react-redux' 

class CalendarDatePicker extends Component { 
    state = { 
    toggledDate: null, 
    } 

    componentDidUpdate =() => { 
    const toggledDate = this.state.toggledDate 
    onUpdateSelectedDate(toggledDate) 
    } 

    render() { 
    const selectedDate = this.props.selectedDays 
    const onDayClick = this.props.onDayClick 
    const toggledDate = this.state.toggledDate 
    const modifiers = { 
    } 

    return (
     <DayPicker 
      selectedDays={toggledDate===null ? selectedDate : toggledDate} 
      onDayClick={onDayClick} 
      todayButton="Go to Today" 
      firstDayOfWeek={1} 
      modifiers = {modifiers} 
      onMonthChange={(d) => this.setState({toggledDate: d})} 
     /> 
    ) 
    } 
} 

CalendarDatePicker.propTypes = { 
    selectedDays: propTypes.instanceOf(Date), 
    onDayClick: propTypes.func, 
    onUpdateSelectedDate: propTypes.func, 
} 

const mapStateToProps = (state) => { 
    return { 
    //toggledDate: state.diaryContext.activities.selectedDates, 
    } 
} 

const mapDispatchToProps = (dispatch) => { 
    return { 
    onUpdateSelectedDate: (toggledDate) => { dispatch(diaryActions.updateSelectedDate(toggledDate)) }, 
    } 
} 

export default connect(null, mapDispatchToProps)(CalendarDatePicker) 

回答

2

您使用的componentDidUpdate方法的错误签名应该是componentDidUpdate(prevProps, prevState),然后你可以从mapStateToProps这样的访问功能:

componentDidUpdate (prevProps, prevState) { 
    const toggledDate = prevState.toggledDate 
    prevProps.onUpdateSelectedDate(toggledDate) 
} 
+0

(无关,但是使它一段代码并不真正有用,因为它无法运行不带任何上下文。) –

+0

真棒!非常感谢:D –