You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-datepicker无法切换月份问题求助

React DatePicker 无法切换月份的解决方案

问题复现

react-datepicker组件无法切换月份,日期选择功能正常,但月份切换箭头按钮无响应;移除readonly属性后,输入框可正常输入日期,但日历面板的月份切换仍失效。使用版本:React ^18.3.1,react-datepicker ^4.10.0,组件代码如下:

<Grid item xs={6}>
    <Controller
        name={"periodFrom-" + input.index}
        control={input.form}
        render={({field: {onChange, value}, fieldState: {error}}) => (
            <div style={{marginTop: "10px"}}>
                <InputLabel>start date </InputLabel>
                <DatePicker dateFormat="dd/MM/yyyy"
                            customInput={<TextField variant="outlined" fullWidth
                                                    error={!!error}
                                                    inputProps={{readOnly: true}}
                                                    helperText={error ? error.message : null}/>}
                            selected={value} onChange={onChange}/>
            </div>
        )}
    />
</Grid>

解决方案

1. 调整readOnly属性位置

将readOnly从自定义输入组件(TextField)的inputProps中移到DatePicker组件本身,避免输入框的只读设置干扰日历面板的事件传递:

<Grid item xs={6}>
    <Controller
        name={"periodFrom-" + input.index}
        control={input.form}
        render={({field: {onChange, value}, fieldState: {error}}) => (
            <div style={{marginTop: "10px"}}>
                <InputLabel>start date </InputLabel>
                <DatePicker 
                    dateFormat="dd/MM/yyyy"
                    readOnly={true} // 移至DatePicker组件
                    customInput={
                        <TextField 
                            variant="outlined" 
                            fullWidth
                            error={!!error}
                            helperText={error ? error.message : null}
                        />
                    }
                    selected={value} 
                    onChange={onChange}
                />
            </div>
        )}
    />
</Grid>

2. 检查事件阻止逻辑

确认自定义输入组件(TextField)没有在onClick、onMouseDown等事件中调用e.stopPropagation()或e.preventDefault(),这类操作会阻止日历面板内部按钮的事件触发。

3. 验证样式文件引入

确保已在项目入口文件中引入react-datepicker的样式文件,缺失样式可能导致按钮点击区域失效:

import "react-datepicker/dist/react-datepicker.css";

4. 升级react-datepicker版本

react-datepicker v4.10.0属于较旧版本,可能存在与React 18的兼容性问题。建议升级至最新兼容版本(如v6.x),新版本修复了大量交互相关的bug,且对React 18支持更完善。

内容的提问来源于stack exchange,提问作者EcmaScriptIsMyNativeLanguage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:47:06