Я очень новичок в React, и я пытаюсь вызвать данные с сервера с помощью fetch
api.Извлечь данные с помощью React
Если я хочу сделать вспомогательный класс, чтобы получить данные, как этот один
import { Promise } from 'es6-promise';
import fetch from 'isomorphic-fetch';
let responseData = response => {
return response;
};
let getData = (dataURL, headers) => {
let result = {
data: [],
message: ''
};
if (dataURL === null || dataURL === undefined || dataURL === '') {
result.message = 'URL is not correct';
responseData(result);
}
fetch(dataURL, headers)
.then(response =>{
if (response.ok) {
response.json().then(data => {
result.data = data;
result.message = response.statusText;
responseData(result);
});
}else{
result.message = 'Network response was not ok.';
responseData(result);
}
})
.catch(err => console.log(err));
};
exports.responseData = responseData;
exports.getData = getData;
и всякий раз, когда имеются данные, я буду просить Реагировать вынести мнение, во время время ожидания, оно покажет значок загрузки.
Я положил вызов внутри componentDidMout
, но к тому моменту, когда он будет выполнен, результатом будет всегда undefined
.
componentDidMount() {
var self = this;
let result = util.getData('http://localhost:3001/menus');
const { dispatch } = this.props;
// dispatch(menuActions.fetchMenusIfNeeded());
if (result !== null && result !== undefined) {
if (this.isMounted()) {
this.setState({
items: result.data.results
});
}
}
}
В Угловом, когда имеются данные, он будет обновляться соответствующим образом, но я действительно не понимаю, как это сделать в React.
EDIT 1: Обновите вспомогательный класс:
import { Promise } from 'es6-promise';
import fetch from 'isomorphic-fetch';
let getData = (dataURL, headers) => {
return fetch(dataURL, headers);
};
exports.getData = getData;
Он всегда будет возвращать Promise
таким образом я могу обработчик цепи для передачи данных в других компонентах. Единственная проблема, с которой мне нужно обработать сообщение, можно, читая объект Response
в моих компонентах.
В React компонент:
componentWillMount() {
util.getData('http://localhost:3001/menus')
.then(response =>{
if (response.ok) {
response.json().then(data => {
console.log(data);
this.setState({
items: data.result
});
});
}
})
.catch(err => console.log(err));
}
Но всякий раз, когда он получил данные, функция render()
уже закончена, я должен заставить его обновить снова?
вы ничего не возвращает из 'функции getData', но даже если вы сделали вернуться' result', это асинхронная так вы не увидите 'result' в' componentDidMount'. –
Я понял проблему, но всякий раз, когда я возвращаю 'Promise', как я должен сообщить React для обновления функций' render() '. –
Статья, в которой ответы на все вопросы о том, как и когда извлекать данные в React: [Как получить данные в React] (https://www.robinwieruch.de/react-fetching-data/). Возможно, это помогает людям узнать об этом, когда они спотыкаются по этому вопросу. –