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

React Native Element Dropdown下拉框显示label而非value问题求助

问题:下拉列表仅展示label字段,无法显示value字段内容

使用react-native-element-dropdown库,数据结构为{label, value}格式,但下拉列表只显示label(如"319"),希望显示对应的value(如"Ahşap")。

数据示例

[
  {
    "label": "319",
    "value": "Ahşap",
  },
  {
    "label": "320",
    "value": "Betonarme",
  },
  {
    "label": "321",
    "value": "Çelik ",
  },
  {
    "label": "322",
    "value": "Kütük",
  },
  {
    "label": "323",
    "value": "Prefabrik",
  },
]
[
  {
    "label": "332",
    "value": "Var",
  },
  {
    "label": "333",
    "value": "Yok",
  },
]

现有代码

App.js

const [selected, setSelected] = useState({});

// 将对象转为数组格式
function setDropdown(query) {
  const response = query;
  try {
    const array = Object.entries(response).map(([key, value]) => ({
      label: key,
      value: value,
    }));
    return array;
  } catch (error) {
    console.log(error);
  }
}

function renderItems({ item }) {
let dropdownData = setDropdown(item.options);
    if (Object.keys(item.options).length > 0) {
      return (
        <View>
          <CustomDropdown
            text={item.name}
            data={dropdownData}
            value={selected}
            setValue={setSelected}
          />
        </View>
      );
    } else if (Object.keys(item.options).length == 0) {
      const keyboardType = item.numeric ? "numeric" : "default";
      return (
        <View style={styles.inputContainer}>
          <TextInput
            style={styles.input}
            placeholder={item.name}
            keyboardType={keyboardType}
          />
        </View>
      );
    }
  }

CustomDropdown.js

function CustomDropdown({ text, data, value, setValue }) {
  const [isFocus, setIsFocus] = useState(false);

  return (
    <View>
      <View style={{ backgroundColor: "#fff", padding: 10, borderRadius: 15 }}>
        <Dropdown
          style={[styles.dropdown, isFocus && { borderColor: "blue" }]}
          placeholderStyle={styles.placeholderStyle}
          selectedTextStyle={styles.selectedTextStyle}
          inputSearchStyle={styles.inputSearchStyle}
          placeholder={!isFocus ? text : "..."}
          data={data}
          maxHeight={300}
          labelField="label"
          valueField="value"
          onFocus={() => setIsFocus(true)}
          onBlur={() => setIsFocus(false)}
          value={value}
          onChange={(item) => {
            setValue(item.value);
            setIsFocus(false);
          }}
        />
      </View>
    </View>
  );
}

解决方案

1. 修改下拉组件的显示字段配置

在CustomDropdown.js的Dropdown组件中,labelField属性控制下拉选项和选中后显示的文本字段,当前设置为label导致只展示编号。将其改为value即可显示目标内容:

<Dropdown
  // 其他属性不变
  labelField="value"
  valueField="value"
  // 其他属性不变
/>

2. 修正状态初始值类型

App.js中selected初始值为对象{},但实际选中后存储的是字符串类型的value值,类型不匹配可能导致显示异常,将初始值改为空字符串:

const [selected, setSelected] = useState('');

3. (可选)多下拉场景的状态隔离

如果页面存在多个下拉组件,共用一个selected状态会导致选中值冲突。建议改为对象存储,用每个下拉的唯一标识作为key:

// App.js中修改状态初始化
const [selected, setSelected] = useState({});

// CustomDropdown中修改onChange逻辑(需额外传递下拉唯一标识,如item.name)
onChange={(item) => {
  setValue(prev => ({...prev, [itemKey]: item.value}));
  setIsFocus(false);
}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:31:06