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

React同级组件监听彼此状态变化实现出生日期选择验证

实现方案

按照你说的「子组件传值给父组件→父组件维护公共状态→父组件将状态下发给目标子组件」的思路,具体实现步骤如下:

1. 父组件Form逻辑调整

  • 首先在父组件中通过useState维护全局的选中年份状态,同时定义接收子组件传值的回调方法,再将状态下发给月份组件:
import { useState } from 'react';
import BirthYear from './BirthYear';
import BirthMonth from './BirthMonth';

const Form = () => {
  // 存储用户选中的年份
  const [selectedYear, setSelectedYear] = useState(null);

  // 接收年份组件回传的选中值
  const handleYearChange = (year) => {
    setSelectedYear(year);
  };

  return (
    <div>
      {/* 给年份组件传回调方法用来接收子组件值 */}
      <BirthYear onYearChange={handleYearChange} />
      {/* 把选中的年份下发给月份组件 */}
      <BirthMonth selectedYear={selectedYear} />
      {/* 其余组件逻辑保持你的原有实现即可 */}
    </div>
  )
}
export default Form;

2. 年份子组件BirthYear逻辑调整

  • 选中值变化时调用父组件传入的回调方法,将选中的年份回传给父组件:
const BirthYear = ({ onYearChange }) => {
  const handleSelectChange = (e) => {
    const currentYear = e.target.value;
    // 调用父组件传的回调方法回传值
    onYearChange(currentYear);
  };

  return (
    <select onChange={handleSelectChange}>
      {/* 保持你原有的年份选项生成逻辑 */}
    </select>
  )
}
export default BirthYear;

3. 月份子组件BirthMonth逻辑调整

  • 直接接收父组件传来的selectedYear参数,即可打印拿到选中的年份:
const BirthMonth = ({ selectedYear }) => {
  // 已经可以实时拿到选中的年份,直接打印即可
  console.log('当前选中的年份:', selectedYear);

  return (
    <select>
      {/* 保持你原有的月份选项生成逻辑,后续联动规则可以基于拿到的selectedYear自行实现 */}
    </select>
  )
}
export default BirthMonth;

完成以上修改后,年份选择器切换选项时,月份组件就能实时获取到最新的选中年份,后续的月份、日期联动逻辑,都可以按照同样的「子传父→父传子」逻辑实现即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:36:00