我正在使用 Next.js 和 react-dates 构建应用。
我有两个组件:DateRangePicker 组件和 DayPickerRangeController 组件。
当窗口宽度大于 1180 像素时,我希望渲染 DateRangePicker,如果小于此大小,则希望渲染 DayPickerRangeController。
以下是代码:
windowSize > 1180 ?
<DateRangePicker
startDatePlaceholderText="Start"
startDate={startDate}
startDateId="startDate"
onDatesChange={handleOnDateChange}
endDate={endDate}
endDateId="endDate"
focusedInput={focus}
transitionDuration={0}
onFocusChange={(focusedInput) => {
if (!focusedInput) {
setFocus("startDate")
} else {
setFocus(focusedInput)
}
}}
/> :
<DayPickerRangeController
isOutsideRange={day => isInclusivelyBeforeDay(day, moment().add(-1, 'days'))}
startDate={startDate}
onDatesChange={handleOnDateChange}
endDate={endDate}
focusedInput={focus}
onFocusChange={(focusedInput) => {
if (!focusedInput) {
setFocus("startDate")
} else {
setFocus(focusedInput)
}
}}
/>
}
通常我使用React Hook与window对象一起使用来检测窗口的屏幕宽度,就像这个示例。
但是我发现,在服务器端渲染(SSR)时这种方法不可用,因为SSR渲染没有window对象。
有没有其他替代方法可以安全地获取窗口大小而不受SSR影响?
useEffect
中直接调用setWindowSize
,而不仅仅将其作为参数传递给window.addEventListener
。在页面的初始加载中,“resize”事件监听器无法足够地填充窗口尺寸。 - N4v