【问题标题】:put the JSON array data from fetch to dropdown将 JSON 数组数据从 fetch 放到下拉列表中
【发布时间】:2018-09-17 12:45:26
【问题描述】:

我正在尝试构建一个简单的应用程序,该应用程序将显示一个下拉菜单,该下拉菜单的值是从 fetch 的返回中获得的。此外,我只想在下拉/选择器/或我可以选择 1 个选项的任何其他组件中显示该位置。

我应该把返回值放在一个数组中还是什么?

当我安慰返回时,是这样的

[
  {
    "ID": "BOGOR~10~522",
    "Location": "BOGOR"
  },
  {
    "ID": "JADETABEK~16~502",
    "Location": "JADETABEK"
  }
]

这里是测试类

import React , { Component } from 'react';
import { View , StyleSheet , Text , Dimensions , Picker } from 'react-native';
import { Dropdown } from 'react-native-material-dropdown';
import { Item } from 'native-base';

const ScreenWidth = Dimensions.get('window').width;
const Screenheight = Dimensions.get('window').height;

export default class testing extends Component {

    constructor(props) {
        super(props)
        this.state = {
            data: []
        }
    } 

    componentDidMount() {
        fetch(url, {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({"lokasi":
                {

                }
            })
        })
        .then(response => response.json())
        .then(res => {
            console.log(res.PilihLokasiResult.Lokasi)
            this.setState({
                data: res.PilihLokasiResult.lokasi
            })
        })
    }

    render() {
        return(
            <View style={styles.container}>

                    {this.state.data.map((index) => {
                        return(
                            <Dropdown/>
                        )
                    })}

            </View>
        )
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: 'white',
    },
})

所以现在构造函数中的 data[] 具有响应的值,就像第一个框中一样。但我不知道如何将位置值设置为下拉项。谁能帮忙?谢谢

这是 console.log(res)

【问题讨论】:

  • github.com/n4kz/react-native-material-dropdown 它等待 data 属性作为数组。因此,您需要为选项传递一个数组。您可以从获取结果中创建此数组。我无法理解您与“位置”相关的另一个问题。如果您能更清楚地解释它,也许有人可以提供帮助。
  • 当我调用 fetch 方法时,它会返回一个结果,其中 res.PilihLokasi.Lokasi 的值就像上面的第一个框。所以我需要返回的位置值,放入下拉项。
  • 我做对了吗?你想要一个包含Location 值的数组来传递Dropdown 组件吗?
  • 是的,你是对的.. 所以我希望下拉列表中有项目:-)BOGOR -)JADETABEK。我是 react native 的初学者,所以如果我做错了请帮忙
  • 没有错,你需要获取想要的数据并传递给组件。我已经提供了一个答案,我希望它有效。

标签: reactjs react-native


【解决方案1】:

您要使用的库等待一个道具 data 数组,其中包括名为 value 的对象键作为您的选项值。所以,你可以创建它,然后像这样传递它(未经测试):

createData() {
  return this.state.data.map( el => ({value: el.Location}));
}

render() {
        const data = this.createData();
        return(
            <View style={styles.container}>
                <Dropdown data={data} />
            </View>
        )
}

聊天讨论后更新

不知何故,res.PilihLokasiResult.Lokasi 以 JSON 字符串的形式出现。所以使用JSON.parse 并设置这样的状态解决了第二个问题:

this.setState({
    data: JSON.parse( res.PilihLokasiResult.Lokasi )
})

【讨论】:

  • 我试过 .map 功能。它抛出一个错误,说“this.state.map is not a function”
  • 当然,因为它是this.state.data.map :) 我已经更新了我的答案。
  • 哈哈哈现在它说“TypeError:TypeError:无法读取未定义的属性'map'”:(
  • 只需注释掉或删除这一行const data = this.createData(); 然后,在render() 行的正下方添加一个console.log(this.state)。然后在控制台中查找日志。
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2018-06-06
相关资源
最近更新 更多