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

React中将出生日期输入值设为死亡日期最小限制时遇null值报错

问题原因

  • 页面首次渲染时出生日期输入框还没挂载完成,直接调用document.getElementById("BD").value会拿到null触发报错
  • 你已经使用了react-hook-form,完全不需要直接操作原生DOM获取输入值,不符合React的声明式写法
  • 现有代码里的必填校验提示判断的是errors.Name,和两个日期字段的名称BirthDate、DateOfDeath不匹配,必填提示不会正常触发

修复方案

首先从react-hook-form的useForm返回对象中解构出watch方法,监听出生日期字段的实时值,用来动态设置死亡日期的最小值,修改后代码如下:

// 假设你原有代码的useForm调用是如下写法,补充解构watch即可
// const { register, handleSubmit, formState: { errors }, watch } = useForm()
// 新增这行监听BirthDate字段的实时值
const birthDate = watch("BirthDate");

<div className="form-section">
  <label>Date of birth <span style={{ color: "red" }}>*</span>:</label>
  {errors.BirthDate && errors.BirthDate.type === "required" && (
    <span style={{ color: "red" }}>Required!</span>
  )}
  <input
    max={moment().format("YYYY-MM-DD")}
    type="date"
    name="BirthDate"
    id="BD"
    ref={register({ required: true })}
  />
</div>

<div className="form-section">
  <label>Date of death <span style={{ color: "red" }}>*</span>:</label>
  {errors.DateOfDeath && errors.DateOfDeath.type === "required" && (
    <span style={{ color: "red" }}>Required!</span>
  )}
  <input
    min={birthDate || "1900-01-01"}
    max={moment().format("YYYY-MM-DD")}
    type="date"
    name="DateOfDeath"
    ref={register({ required: true })}
  />
</div>

如果你使用的是react-hook-form v7版本,把ref={register(规则)}的写法替换为{...register("字段名", {规则})}即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:57:07