React Native Material Dropdown状态异常:选择项无回调日志输出
问题排查与修复方案
我帮你找出了代码里的几个关键问题,修改后应该就能正常触发选择回调了:
1. 回调事件名称拼写错误
react-native-material-dropdown组件的选择回调prop是驼峰式命名的onChangeText,你代码里写的onchangeText(小写的c)无法被组件识别,这是导致选择时没有任何反应的核心原因。
2. setState中的参数错误
在handleAssigneePicked方法里,你把参数value当成函数调用了(value()),但实际上这个参数就是选中的选项字符串,直接使用value即可。
3. 可选的优化点
- 你的
data数组里有重复的{ value: 'Fruit' }项,建议移除重复值,避免下拉列表出现重复选项; - 状态中的
value字段目前没有被使用,可以考虑删除,简化组件状态。
修改后的完整代码
import React, { Component } from 'react'; import { Dropdown } from 'react-native-material-dropdown'; class DropdownComponent extends Component { constructor(props){ super(props); this.state = { assignee: 'Initial state', // 移除了重复的Fruit选项 data: [{ value: 'Fruit' }, { value: 'Vegetable' }] // 移除了未使用的value字段 } } handleAssigneePicked = value => { console.log("Changed state, selected assignee:", value); // 直接使用value,不再当成函数调用 this.setState({ assignee: value }); }; render() { return ( // 修正了onChangeText的拼写 <Dropdown data={this.state.data} value={this.state.assignee} onChangeText={this.handleAssigneePicked} /> ); } } export default DropdownComponent;
修改后重新运行项目,选择下拉选项时应该就能看到控制台输出Changed state, selected assignee: [选中的值]了,之后你就可以在handleAssigneePicked方法里添加把this.state.assignee发送到Firebase的逻辑啦。
内容的提问来源于stack exchange,提问作者Mikk
相关产品推荐
相关产品推荐

