#react-native #api #react-native-android
#API #react-native
Вопрос:
Мне нужна помощь для извлечения данных из API с помощью запроса GET. Я застрял только для отображения данных в консоли, но я не знаю, как заставить их отображаться на устройстве. Кто-нибудь может мне помочь, пожалуйста?
Это мой код:
class HomeScreen extends React.Component {
constructor(props) {
super(props);
this.state = {
currentDate: new Date(),
markedDate: moment(new Date()).format("YYYY-MM-DD"),
isLoading: true,
data: ''
};
}
componentDidMount() {
fetch("https://URL/api/schedule?filters[employee_id]=6", {method: "GET"})
.then((response) => response.json())
.then((responseJson) => {
this.setState({...this.state, isLoading:false, data:responseJSON}); //set the state with data
})
.catch((error) => {
console.error(error);
});
}
render() {
const today = this.state.currentDate;
const month = moment(today).format("MMMM");
const date = moment(today).format("D")
const day = moment(today).format("dddd");
const data = this.state;
return (...
<FlatList
data={this.state.data}
renderItem={({item,index})=>
(
<Text>{item.id}</Text>
)
}
}
keyExtractor={(item)=>item.id.toString()}
/>
)
И тогда я хотел бы знать, как использовать это что-то вроде «{data.id }» (если я не ошибаюсь)
Вот небольшая часть моего .json :
"data": [
{
"id": 114,
"employee_id": 6,
"room_id": 17,
"type_of_cleaning": "D",
"date": "2020-10-05"
}, ...
Ответ №1:
Я думаю, что что-то вроде:
constructor(props) {
super(props);
this.state = {
currentDate: new Date(),
markedDate: moment(new Date()).format("YYYY-MM-DD"),
isLoading: true,
data: [] //should be an array
};
}
componentDidMount() {
fetch("https://URL/api/schedule?filters[employee_id]=6", {method: "GET"})
.then((response) => response.json())
.then((responseJson) => {
this.setState({...this.state, isLoading:false, data:responseJSON}); //set the state with data
})
.catch((error) => {
console.error(error);
});
}
render() {
const today = this.state.currentDate;
const month = moment(today).format("MMMM");
const date = moment(today).format("D")
const day = moment(today).format("dddd");
const data = this.state.data; //amd you are good from here
}
Вам просто нужно setState, и все должно быть в порядке. Чтобы облегчить вам жизнь, я был бы недоволен, если бы не упомянул, что MOBX и Redux могут облегчить вашу жизнь
Комментарии:
1. в нем говорится: объект недействителен как дочерний элемент React (найден: объект с ключами {data, meta}) Если вы хотели отобразить коллекцию дочерних элементов, вместо этого используйте массив.
Ответ №2:
Вы должны сохранить данные, входящие в состояние, а затем выполнить цикл по ним, даже используя map () или компонент Flatlist
this.state = {
....
data: []
};
componentDidMount() {
fetch("https://URL/api/schedule?filters[employee_id]=6", {method: "GET"})
.then((response) => response.json())
.then((responseJson) => {
this.setState({data: responseJson});
console.log(responseJson);
})
.catch((error) => {
console.error(error);
});
}
Ui
<FlatList
data={this.state.data}
renderItem={({item,index})=>
(
<Text>{item.id}</Text>
)
}
keyExtractor={(item)=>item.id.toString()}
/>
Комментарии:
1. в нем говорится: недопустимый тип элемента: ожидаемая строка (для встроенных компонентов) или класс / функция (для составных компонентов), но получено: не определено. Вероятно, вы забыли экспортировать свой компонент….
2. Добавить
import {FlatList} from "react-native"
3. У меня просто есть правописание, попробуйте еще раз!
4. Хм, попробуйте изменить состояние данных со строки «» на массив [], если не сработает, мы сначала разберемся с проблемой, прокомментируем didMount или не будем обновлять состояние, затем в плоском списке передайте это
data={[1,2,3]}
, а в возврате элемента рендеринга<Text>{index}</Text>
и дайте мне знать, что у вас есть5. undefined не является объектом (вычисление ‘item.id.toString’)