【发布时间】:2019-09-30 20:42:20
【问题描述】:
我有一个按钮 (h1) 组件,它有一个 onclick 处理程序 (handleDateLabelClick),它更改状态以决定日历是否可见。正常工作,它应该将状态更改为当前相反的状态。目前,正确单击按钮会导致日历出现,但再次单击同一按钮不会导致日历消失。我在 handleDateLabelClick 函数中添加了一个控制台日志,以查看正在读取的内容,并且每次 calendarOpen 状态为 false。当我在 devtools 中观察到状态运行正常时,这变得更加有趣(打开时为真,关闭时为假)。这是我的代码(BookCard 是 Calendar 的父级):
书卡
const BookCard = ({
...props
}) => {
const [calendarOpen, setCalendarOpen] = useState(false)
const handleDateLabelClick = () => {
setCalendarOpen(!calendarOpen)
}
<DateWrapper>
<DateHeading onClick={handleDateLabelClick} level={4}>
{parsedDate.toLocaleDateString('en-US', dateFormat)}
</DateHeading>
<Calendar
handleChooseDate={handleChooseDate}
calendarOpen={calendarOpen}
setCalendarOpen={setCalendarOpen}
{...props}
/>
</DateWrapper>
日历
const EnhancedCalendar = ({
handleChooseDate,
calendarOpen,
setCalendarOpen,
...props
}) => {
EnhancedCalendar.handleClickOutside = () => setCalendarOpen(false)
return (
<StyledCalendar
calendarOpen={!!calendarOpen}
showNeighboringMonth
minDetail="month"
onClickDay={handleChooseDate}
activeStartDate={props.experienceDate}
tileDisabled={({ activeStartDate, date, view }) => date < new Date()}
tileDisabled={({ activeStartDate, date, view }) => {
const availabilitiesForCurrentDate = getTimesForCurrentDate(date, props.detail.availabilities)
return (
!availabilitiesForCurrentDate.length
)
}}
/>
)
}
const clickOutsideConfig = {
handleClickOutside: () => EnhancedCalendar.handleClickOutside
}
export default onClickOutside(EnhancedCalendar, clickOutsideConfig)
【问题讨论】:
-
日历如何使用
setCalendarOpen? -
我在日历中有一个钩子,可以检测日历外是否有点击。它是在 Calendar 中执行的。
-
所以点击标题会是日历外的点击?
标签: reactjs