const DayScaleCell = props => (
<WeekView.DayScaleCell
{...props}
onClick={() => Calendar.changeCurrDate(props.startDate)}
/>
);
class Calendar extends React.Component {
constructor(props) {
super(props);
this.state = {
userId: fire.auth().currentUser.uid,
data: appointments,
currentDate: new Date(), // set to today's date by default
message: '',
open: false,
selectedDate: new Date(),
};
}
changeCurrDate = (date) => {
this.setState({
currentDate: date.getDate(),
})
}
....
const DayScaleCell
会覆盖我正在Calendar
组件中使用的外部组件中的元素。当我单击该元素时,我试图更改状态。
https://codesandbox.io/s/llqmkq887
这是我遵循的演示,演示console.log
的点击日期。我正在尝试获取点击日期的日期(例如19),并将其分配到组件中的currentDate
状态。
但是,我的方法给了我一个错误TypeError: Calendar.changeCurrDate is not a function
。怎么做呢?
答案 0 :(得分:0)
您可以做的是用某种高阶函数编写DayScaleCell
。那将接受其他数据,然后返回组件本身
const getDayScaleCellComponent = onCellClick => props => (
<WeekView.DayScaleCell
{...props}
onClick={() => onCellClick(props.startDate)}
/>
);
在Calendar
组件中使用
<WeekView
startDayHour={9}
endDayHour={19}
dayScaleCellComponent={getDayScaleCellComponent(this.changeCurrDate)}
/>
答案 1 :(得分:0)
这里是如何将函数传递给该组件的示例。 https://codesandbox.io/s/189zv041n4
WeekView组件需要进行更改以允许传入函数
const DayScaleCell = (props, func) => (
<WeekView.DayScaleCell {...props} onClick={() => func()} />
);
在那之后,简单地传递道具和函数
<WeekView
startDayHour={9}
endDayHour={19}
dayScaleCellComponent={(e) => DayScaleCell(e, this.onChange)}
/>
传入的函数将增加应用程序类的计数状态。