#javascript #react-native
#javascript #react-native
Вопрос:
Я выполняю вызов запроса GET из своего react-native кода, и ответ на запрос GET выглядит следующим образом-
[
{
"id": 1,
"title": "homework",
"detail": "nothing details",
"status": "1",
"url": "www.google.com",
"mail": "a@a.com",
"phone": "0171551223366",
"category": "2",
"timestamp": 12.3
},
{
"id": 2,
"title": "homework",
"detail": "nothing details",
"status": "1",
"url": "www.google.com",
"mail": "a@a.com",
"phone": "0171551223366",
"category": "2",
"timestamp": 12.3
}
]
В случае, если это был простой json-ответ, вообще не было проблем с синтаксическим анализом, но в случае, если это массив, я не понимаю, как получить и сохранить их в массиве.
Здесь я привел свой код-
import React from 'react';
import { StyleSheet, Text, View, Image, AsyncStorage, ActivityIndicator } from 'react-native';
import {Icon, Button, Container, Header, Content, Left} from 'native-base';
import CustomHeader from './CustomHeader';
let jwt=''
class NoteMeHome extends React.Component {
state = {
getValue: '',
dataSource:[],
isLoading: true
}
componentDidMount() {
AsyncStorage.getItem("token").then(value => {
console.log(value);
jwt = value;
this.setState({
getValue: value,
});
});
const url = 'my url';
fetch(url, {
method: 'GET',
headers: new Headers({
'Content-Type' : 'application/json',
'token': 'abcd',
'jwt': jwt
})
})
.then((response)=> response.json() )
.then((responseJson) => {
console.log('####:' responseJson.title)
this.setState({
dataSource: responseJson,
isLoading: false
})
})
.catch((Error) => {
console.log(Error)
})
}
static navigationOptions = ({navigation}) => ({
title: "Home",
headerLeft: <Icon name="ios-menu" style={{paddingLeft:10}}
onPress={()=>navigation.navigate('DrawerOpen')}/>,
drawerIcon:
<Image source={{uri: 'https://png.icons8.com/message/ultraviolet/50/3498db'}}
style={styles.icon}
/>
})
render() {
const { getValue } = this.state;
return(
this.state.isLoading
?
<View style={{flex:1, justifyContent:'center', alignItems:'center'}}>
<ActivityIndicator size="large" color="#330066" animating/>
</View>
:
<Container>
<CustomHeader
title="Home"
drawerOpen={()=>this.props.navigation.navigate('DrawerOpen')}
/>
<Content contentContainerStyle={{flex:1, alignItems:'center',
justifyContent:'center', padding:10}}>
<Button full onPress={()=> this.props.navigation.navigate('Settings')}>
<Text style={{color:'white'}}>Go To Settings</Text>
</Button>
<Text>{this.state.getValue}</Text>
</Content>
</Container>
)
}
}
const styles = StyleSheet.create({
icon:{
height: 24,
width: 24
}
})
export default NoteMeHome;
Итак, было бы очень приятно, если бы кто-нибудь помог мне с этим кодом и подсказал, как сохранить данные из ответа json в массив.
Комментарии:
1.
responseJson
это уже массив. Не ясно, в чем ваша конкретная проблема2. извините, я раньше этого не понимал. Но после вашего предложения я написал console.log(response[0].title) и получил некоторое значение из ответа JSON. Итак, спасибо
Ответ №1:
Это должно работать.В противном случае вы можете сделать это
for (var i = 0; i < responseJson.length; i ){
this.state.dataSource.push({
...
})
}