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

react-native-dropdown-picker如何取消已选中的下拉选项

react-native-dropdown-picker 点击已选项取消选中实现

问题背景

使用react-native-dropdown-picker在React Native应用中实现下拉选择功能时,需要实现「下拉展开状态下,点击已选中的选项即可取消选中」的交互,组件未提供直接开启该功能的内置属性。
初始实现代码如下:

import React, { useState } from 'react';
import { View } from 'react-native';
import DropDownPicker from 'react-native-dropdown-picker';

export default function App() {
  const [open, setOpen] = useState(false);
  const [value, setValue] = useState('');
  const [items, setItems] = useState([
    {label: 'Spain', value: 'spain'},
    {label: 'Madrid', value: 'madrid'},
    {label: 'Barcelona', value: 'barcelona'},
    {label: 'Italy', value: 'italy'},
    {label: 'Rome', value: 'rome'},
    {label: 'Finland', value: 'finland'}
  ]);

  return (
    <View style={{
      flex: 1,
      alignItems: 'center',
      justifyContent: 'center',
      paddingHorizontal: 15
    }}>
      <DropDownPicker
        open={open}
        value={value}
        items={items}
        setOpen={setOpen}
        setValue={setValue}
        setItems={setItems}
      />
    </View>
  );
}

运行效果参考: 下拉选择器效果截图

解决方案

直接通过组件暴露的onSelectItem回调自定义选中逻辑即可,无需修改组件源码:

  • 监听选项点击事件,判断当前点击项是否为已选中项
  • 若点击的是已选中项,将选中值重置为空,实现取消选中效果
  • 若点击的是未选中项,正常更新选中值即可

修改后的组件配置代码:

<DropDownPicker
  open={open}
  value={value}
  items={items}
  setOpen={setOpen}
  setValue={setValue}
  setItems={setItems}
  // 新增自定义选中逻辑
  onSelectItem={(item) => {
    if (item.value === value) {
      // 点击已选项,清空选中状态,和初始value类型保持一致即可,初始为''就传''
      setValue(null)
    } else {
      // 点击未选项,正常赋值
      setValue(item.value)
    }
  }}
/>

补充说明

如果使用的是多选模式(配置multiple={true}),只需要调整判断逻辑:检测点击项的value是否存在于当前选中值数组中,存在则过滤掉该值,不存在则追加到数组中即可,核心实现逻辑一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:06:22