当前位置:首页 > React

react如何实现三级联动

2026-01-26 06:50:38React

实现三级联动的基本思路

三级联动通常指三个下拉菜单(Select)之间的数据依赖关系,例如省份、城市、区县的级联选择。React中实现的核心在于状态管理和数据结构的组织。

数据结构设计

采用嵌套对象或数组存储层级数据,例如:

const regionData = [
  {
    id: 1,
    name: '广东省',
    children: [
      {
        id: 11,
        name: '广州市',
        children: [
          {id: 111, name: '天河区'},
          {id: 112, name: '越秀区'}
        ]
      }
    ]
  }
]

组件状态管理

使用useState分别存储三个层级的选择状态:

react如何实现三级联动

const [provinces, setProvinces] = useState([]);
const [cities, setCities] = useState([]);
const [districts, setDistricts] = useState([]);
const [selectedProvince, setSelectedProvince] = useState('');
const [selectedCity, setSelectedCity] = useState('');
const [selectedDistrict, setSelectedDistrict] = useState('');

事件处理逻辑

当省份选择变化时清空下级选项并加载城市数据:

const handleProvinceChange = (e) => {
  const provinceId = e.target.value;
  setSelectedProvince(provinceId);
  setSelectedCity('');
  setSelectedDistrict('');

  const targetProvince = regionData.find(p => p.id == provinceId);
  setCities(targetProvince?.children || []);
  setDistricts([]);
}

城市选择变化时同理处理区县数据:

react如何实现三级联动

const handleCityChange = (e) => {
  const cityId = e.target.value;
  setSelectedCity(cityId);
  setSelectedDistrict('');

  const targetCity = cities.find(c => c.id == cityId);
  setDistricts(targetCity?.children || []);
}

渲染下拉菜单

<select value={selectedProvince} onChange={handleProvinceChange}>
  <option value="">选择省份</option>
  {provinces.map(p => (
    <option key={p.id} value={p.id}>{p.name}</option>
  ))}
</select>

<select value={selectedCity} onChange={handleCityChange}>
  <option value="">选择城市</option>
  {cities.map(c => (
    <option key={c.id} value={c.id}>{c.name}</option>
  ))}
</select>

<select value={selectedDistrict} onChange={e => setSelectedDistrict(e.target.value)}>
  <option value="">选择区县</option>
  {districts.map(d => (
    <option key={d.id} value={d.id}>{d.name}</option>
  ))}
</select>

性能优化建议

对于大数据量场景:

  1. 使用useMemo缓存计算结果
  2. 考虑异步加载数据
  3. 使用虚拟滚动技术处理超长列表

完整组件示例

function Cascader() {
  const [data] = useState(regionData);
  const [provinces, setProvinces] = useState(data);
  const [cities, setCities] = useState([]);
  const [districts, setDistricts] = useState([]);

  // 状态和事件处理同上...

  return (
    <div className="cascader">
      {/* 三个select渲染 */}
    </div>
  );
}

第三方库方案

如需要快速实现,可考虑:

  • rc-cascader
  • antd Cascader组件
  • react-select的级联功能

这些组件已封装了完整的联动逻辑和UI样式。

分享给朋友:

相关文章

react native 如何

react native 如何

安装 React Native 开发环境 确保系统已安装 Node.js(建议版本 16 或更高)。通过以下命令安装 React Native CLI 工具: npm install -g rea…

vue如何实现登录

vue如何实现登录

实现登录功能的基本步骤 使用Vue实现登录功能通常需要结合后端API、状态管理以及路由控制。以下是常见的实现方式: 创建登录表单组件 在Vue组件中构建包含用户名和密码输入框的表单: <te…

vue如何实现曲线图

vue如何实现曲线图

使用 ECharts 实现曲线图 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 并创建基础图表组件: <temp…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app np…

h5如何实现定位

h5如何实现定位

使用HTML5 Geolocation API HTML5提供了Geolocation API,可以获取用户的地理位置信息。通过navigator.geolocation对象实现,支持获取经纬度、海拔…