当前位置:首页 > 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分别存储三个层级的选择状态:

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([]);
}

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

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>
  );
}

第三方库方案

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

react如何实现三级联动

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

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

分享给朋友:

相关文章

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指阻止组件在特定条件下进行不必要的渲染。可以通过以下几种方式实现: 条件渲染 使用条件语句(如if或三元运算符)直接返回null,避免渲染组件内容。例如:…

vue项目如何实现

vue项目如何实现

Vue项目实现步骤 环境搭建 确保已安装Node.js和npm。使用Vue CLI创建项目: npm install -g @vue/cli vue create my-project cd my-…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。 con…