我有一个需要访问不同API的应用,具体取决于dropdown用户触摸
到目前为止,我在componentWillMount()
中调用API以在下拉列表中创建Label
和item Value
:
api.get('MyURL')
.then((response)=> {
var jsonResult = JSON.parse(response.data)
var result = jsonResult.reduce((r,o)=> r.concat(...Object.values(o)),[])
console.log(result)
this.setState({data: result})
})
.catch((err)=>{
console.log("axios cathing error")
Alert.alert("failed", "Retry to retrieve from API", [{text:'OK', onPress:()=>{this.componentWillMount()}}])
console.log(err)
})
// Rendering Dropdown
<Dropdown
ref={(ref) => this.dropdown = ref}
onFocus={()=>{console.log("onFocus"), console.log(index)}}
dropdownOffset={{top:10, left:30}}
dropdownPosition={0}
itemCount={4}
containerStyle={{borderWidth:1, borderColor:'lightgrey', borderRadius:50, width:DeviceWidth*0.8, paddingLeft:DeviceWidth*0.02}}
inputContainerStyle={{ borderBottomColor: 'transparent' }}
data={data}
itemTextStyle={global.global.TextBold}
valueExtractor={({value})=> value}
onChangeText={(value)=>{this.onChangeTextPress(item.name, value, index)}}
value={this.state.selected[item.name]}
/>
但是我没有看到处理onPress
的任何道具,仅onChangeText
readme
道具
以及那些在自述文件中未声明处理触摸的onFocus
道具,但onFocus
只是在下拉列表中有一些项目时才会工作,
答案 0 :(得分:1)
如果onPress
为0,则从react-native-material-dropdown source,itemCount
返回。
所以唯一的解决方案是分叉repo并将onFocus
调用移到!itemCount
检查上方(或添加不同的props方法以保留当前的API行为),然后发布和使用你自己的fork(或者只是将模块移动到你自己的项目源中)。
或者,更改您的设计以使用[{ value: 'Loading...' }]
作为初始数据,这可能是更好的用户体验。