如何在 React Native expo 的下拉选项中动态获取 api 数据

Posted

技术标签:

【中文标题】如何在 React Native expo 的下拉选项中动态获取 api 数据【英文标题】:How to fetch api data in Dropdown options in React Native expo Dynamically 【发布时间】:2020-06-26 12:16:04 【问题描述】:

我是 React-Native 的新手,在获取下拉列表中的 api 数据时遇到了一些问题。 基本上我想从 API 中获取名称并将其显示在下拉列表中。 有一段时间我已经添加到国家。 下面是我的代码。 我只想从 api 中获取员工的姓名。

import DropDownPicker from 'react-native-dropdown-picker';
export default class ImageScreen extends React.Component   
  static navigationOptions = ( navigation ) => 
    return 
      title: "Source Listing",
      headerStyle: backgroundColor: "#000",
      headerTitleStyle: textAlign: "center",flex: 1
     ;
    ;
    constructor(props) 
     super(props);
     this.state = 
       loading: true,
       dataSource:[]
      ;
    
    componentDidMount()
    fetch("https://jsonplaceholder.typicode.com/users")  // **Api for fetching**
    .then(response => response.json())
    .then((responseJson)=> 
      this.setState(
       loading: false,
       dataSource: responseJson
      )
    )
    .catch(error=>console.log(error)) //to catch the errors if any
    
    FlatListItemSeparator = () => 
    return (
      <View style=
         height: .5,
         width:"100%",
         backgroundColor:"rgba(0,0,0,0.5)",
    
    />
    );
    
    renderItem=(data)=>
    <TouchableOpacity style=styles.list>
    <Text style=styles.lightText>data.item.name</Text>
    <Text style=styles.lightText>data.item.email</Text>
    <Text style=styles.lightText>data.item.company.name</Text></TouchableOpacity>
    render()
     if(this.state.loading)
      return( 
        <View style=styles.loader> 
          <ActivityIndicator size="large" color="#0c9"/>
        </View>
    )
    return(
     <View style=styles.container>
       <ModernHeader title = "Contact us " />





       <DropDownPicker style =  alignItems : "center"
   , justifyContent :"center"
  items=[
        label: data.item.name, value:  data.item.name **Dropdown list option**
    ]
    defaultValue=this.state.country
    containerStyle=height: 50,width:375
   
    style=backgroundColor: '#fafafa',borderWidth: 4,
    borderColor: "#ffa726",
    borderRadius: 6,fontSize: 30
    dropDownStyle=backgroundColor: '#fafafa'
    searchable=true
    searchablePlaceholder="Search..."
    searchableError="Not Found"
    onChangeItem=item => this.setState(
        country: item.value
    ,
    console.log(item.value)
    
    )
  
   
    />

    </View>
    )
    

感谢任何帮助

【问题讨论】:

【参考方案1】:

您只需映射您所在州的对象以匹配下拉选择器所需的结构。

您可以查看代码

<DropDownPicker
            style=
                alignItems: "center"
                , justifyContent: "center"
            
            items=this.state.dataSource.map(item=> (label:item.name,value:item.name))
            defaultValue=this.state.country
            containerStyle= height: 50, width: 375 

            style=
                backgroundColor: '#fafafa', borderWidth: 4,
                borderColor: "#ffa726",
                borderRadius: 6, fontSize: 30
            
            dropDownStyle= backgroundColor: '#fafafa' 
            searchable=true
            searchablePlaceholder="Search..."
            searchableError="Not Found"
            onChangeItem=item => this.setState(
                country: item.value
            ,
                console.log(item.value)
            )
            
        />

唯一需要改变它的行是下面一行

items=this.state.dataSource.map(item=> (label:item.name,value:item.name))

【讨论】:

该死的!非常感谢伙计。现在你能告诉我如何运行从列表中选择名称的函数 在下拉菜单中添加一个 onchange 属性 onChangeItem=item => this.setState( name: item.value ) 类似这样的东西

以上是关于如何在 React Native expo 的下拉选项中动态获取 api 数据的主要内容,如果未能解决你的问题,请参考以下文章

react native Expo完全基于ScrollView实现的下拉刷新和上拉触底加载

如何使用搜索文本输入(expo、react-native)在屏幕上显示项目

React Native - 如何构建 expo react native 应用程序,使其不需要 Expo android 应用程序打开

如何在 expo/react-native 应用程序中添加自定义节点模块?

React Native:如何使用 expo 在 webview 中制作全屏 youtube 嵌入视频(没有 react-native 链接)

如何使用 expo 实现带有 react-native 的条带? [关闭]