从API获取嵌套值时出现问题(react native)
我正在尝试制作一个应用程序,它将显示从一个特定火车站到另一个火车站的发车情况,尽管我的代码可以工作,但我很难从API url中获取所需的值。(我用不同的API url测试了它,它可以正常工作) 这是我的密码从API获取嵌套值时出现问题(react native),api,react-native,axios,Api,React Native,Axios,我正在尝试制作一个应用程序,它将显示从一个特定火车站到另一个火车站的发车情况,尽管我的代码可以工作,但我很难从API url中获取所需的值。(我用不同的API url测试了它,它可以正常工作) 这是我的密码 import React, { Component } from 'react'; import { View, Text } from 'react-native'; import axios from 'axios'; class DeparturesList extends Comp
import React, { Component } from 'react';
import { View, Text } from 'react-native';
import axios from 'axios';
class DeparturesList extends Component {
state = { departs: [] };
componentWillMount() {
axios.get('https://extranet.trainose.gr/services/passenger_public/mobile_app/ajax.php?c=dromologia&op=vres_dromologia&apo=ΛΑΡΙ&pros=ΘΕΣΣ&date=2018-01-10&rtn_date=undefined-undefined-&travel_type=1&trena%5B%5D=apla&trena%5B%5D=ic&trena%5B%5D=ice&trena%5B%5D=bed&time=23%3A59&time_type=anaxwrhsh&rtn_time=23%3A59&rtn_time_type=anaxwrhsh')
.then(response => this.setState({ departs: response.data }));
}
renderDepartures() {
return this.state.departs.map(depart => <Text>{depart.data.metabash.segments.treno}</Text>);
}
render() {
console.log(this.state);
return (
<View>
{this.renderDepartures()}
</View>
);
}
}
export default DeparturesList;
import React,{Component}来自'React';
从“react native”导入{View,Text};
从“axios”导入axios;
类DeparturesList扩展组件{
状态={出发:[]};
组件willmount(){
axios.get()https://extranet.trainose.gr/services/passenger_public/mobile_app/ajax.php?c=dromologia&op=vres_dromologia&apo=)∧ΑΡΡΕ∑∑日期=2018-01-10&rtnΗ日期=未定义的未定义的旅行类型=1&trena%5B%5D=apla&trena%5B%5D=ic&trena%5B%5D=ice&trena%5B%5D=床和时间=23%3A59&timeΗ类型=anaxwrhsh&rtnΗ时间=23%3A59&rtn时间类型=anaxwrhsh')
.then(response=>this.setState({departs:response.data}));
}
RenderParties(){
返回this.state.departes.map(depart=>{depart.data.metabash.segments.treno});
}
render(){
console.log(this.state);
返回(
{this.renderParties()}
);
}
}
导出默认的部门列表;
任何帮助都将不胜感激 首先,您应该查看从服务器得到的响应。首先,
response.data
不是离开列表,response.data.metabash
是您需要的
以下是响应的结构:
{
"status": int,
"message": String,
"data": {
"metabash": [{
ttt: String,
segments: Array<Segments>
}],
},
}
{
“状态”:int,
“消息”:字符串,
“数据”:{
“metabash”:[{
ttt:String,
段:数组
}],
},
}
要获取嵌套值,可以使用以下方法:
this.state.departs.map(depart => depart.segments.map(segment => <Text>{
segment.treno
}</Text>));
this.state.departs.map(depart=>depart.segments.map(segment=>{
特伦诺段
}));
好的,我尝试了一下,经过大量的研究和失败的尝试,我得到了我想要的
这是我的密码
import React from 'react';
import { AppRegistry, FlatList, ActivityIndicator, Text, View } from 'react-native';
import Header from './src/components/Header';
export default class FetchExample extends React.Component {
constructor(props) {
super(props);
this.state = { isLoading: true };
}
componentDidMount() {
return fetch('https://extranet.trainose.gr/services/passenger_public/mobile_app/ajax.php?c=dromologia&op=vres_dromologia&apo=%CE%9B%CE%91%CE%A1%CE%99&pros=%CE%98%CE%95%CE%A3%CE%A3&date=2018-01-10&rtn_date=undefined-undefined-&travel_type=1&trena%5B%5D=apla&trena%5B%5D=ic&trena%5B%5D=ice&trena%5B%5D=bed&time=23%3A59&time_type=anaxwrhsh&rtn_time=23%3A59&rtn_time_type=anaxwrhsh')
.then((response) => response.json())
.then((responseJson) => {
this.setState({
isLoading: false,
dataSource: responseJson.data.metabash,
}, () => {
});
})
.catch((error) => {
console.error(error);
});
}
render() {
if (this.state.isLoading) {
return (
<View style={{ flex: 1, padding: 20 }}>
<ActivityIndicator />
</View>
);
}
return (
<View style={{ flex: 1, paddingTop: 20 }}>
<Header />
<FlatList
data={this.state.dataSource}
renderItem={({ item }) => <Text>{item.segments[0].treno}</Text>}
keyExtractor={(item, index) => index.toString()}
/>
</View>
);
}
}
AppRegistry.registerComponent('trainstation', () => FetchExample);
从“React”导入React;
从“react native”导入{AppRegistry、FlatList、ActivityIndicator、Text、View};
从“./src/components/Header”导入标题;
导出默认类FetchExample扩展React.Component{
建造师(道具){
超级(道具);
this.state={isLoading:true};
}
componentDidMount(){
回传('https://extranet.trainose.gr/services/passenger_public/mobile_app/ajax.php?c=dromologia&op=vres_dromologia&apo=%CE%9B%CE%91%CE%A1%CE%99&pros=%CE%98%CE%95%CE%A3%CE%A3&date=2018-01-10&rtn_日期=未定义未定义-旅行类型=1&trena%5B%5D=apla&trena%5B%5D=ic&trena%5B%5D=ice&trena%5B%5D=bed&time=23%3A59&time类型=anaxwrhsh&rtn_时间=23%3A59&rtn_时间e_类型=anaxwrhsh')
.then((response)=>response.json())
.然后((responseJson)=>{
这是我的国家({
孤岛加载:false,
数据源:responseJson.data.metabash,
}, () => {
});
})
.catch((错误)=>{
控制台错误(error);
});
}
render(){
if(此.state.isLoading){
返回(
);
}
返回(
{item.segments[0].treno}
keyExtractor={(项,索引)=>index.toString()}
/>
);
}
}
AppRegistry.registerComponent('trainstation',()=>FetchExample);
谢谢Antoine的回复!因此我用response.data.metabash替换了response.data,但是我如何去获得更深层的值?我如何看到来自服务器的响应?再次非常感谢!如果我使用例如({departs:response.data.message}))代码>我可以在控制台中看到结果,但我无法更深入地访问其余值:(@SuperNDesigns要查看服务器的响应,您可以使用witch,witch是一个很棒的工具,然后用它美化响应。我已经更新了关于如何获取嵌套值的答案谢谢Antoine!我添加了一个Chrome扩展,可以自动将JSON代码转换为…漂亮的:)我不知道邮递员的事,所以我会试试。我的代码仍然有问题,但非常感谢您的回复!是的,我正在调试我的代码,这也是我想看到的。无论如何,我想我将尝试使用fetch而不是axios。感谢Antoine的兴趣和帮助!