React Native Material Dropdown - 如何处理onPress事件下拉列表?

时间:2018-05-04 03:03:49

标签: react-native

我有一个需要访问不同API的应用,具体取决于dropdown用户触摸

到目前为止,我在componentWillMount()中调用API以在下拉列表中创建Labelitem 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只是在下拉列表中有一些项目时才会工作,

即使在下拉列表中没有任何项目,处理触摸的工作仍然有效吗?

1 个答案:

答案 0 :(得分:1)

如果onPress为0,则从react-native-material-dropdown sourceitemCount返回。

所以唯一的解决方案是分叉repo并将onFocus调用移到!itemCount检查上方(或添加不同的props方法以保留当前的API行为),然后发布和使用你自己的fork(或者只是将模块移动到你自己的项目源中)。

或者,更改您的设计以使用[{ value: 'Loading...' }]作为初始数据,这可能是更好的用户体验。