Я новичок в React, и у меня проблема с извлечением:
Я выполняю проект по реагированию, в котором мне нужно выбрать пять разных URL-адресов в зависимости от того, какую компанию выбирает пользователь.Я много раз менял код, но он не будет работать.
Я пытался с помощью componentDidMount (но он вызывается только один раз, и я хочу получить много URL-адресов), используя «while (! This.состояние) "занято, ждать извлечения, чтобы получить данные, прежде чем присвоить их и т. д.
Функция выборки:
async fetch_data() {
var sel = this.props.select;
symbol = companies[sel];
url = 'https://www.alphavantage.co/query?function=' + func + '&symbol=' + symbol + '&outputsize=' + osize + '&apikey=' + api_key;
var response = await fetch(url);
var data = await response.json();
while(!data);
this.setState({data: data, loading: false });
this.setValues();
}
Функция установки значений (обрезается, чтобы она не была такой длинной):
setValues() {
day = this.state.data["Meta Data"]["3. Last Refreshed"];
open = this.state.data["Time Series (Daily)"][day]["1. open"];
higher = this.state.data["Time Series (Daily)"][day]["2. high"];
}
Функция рендеринга (также обрезана):
render() {
this.fetch_data();
if(this.state.loading || !this.state || !this.state.data) {
return <div>Loading :D...</div>
} else {
return (
<div>
<h2>Symbol: {symbol}</h2>
<p>Url: {url}</p>
<ul>
<li>
Open price: {open}
</li>
<li>
Higher price: {higher}
</li>
</ul>
</div>
);
}
}
Я действительно выполнил свою часть, когда пользователь выбирает компанию, и символ (и URL-адрес) меняется ... Нопроблема в том, что когда программа хочет получить доступ, например, к this.state.data["Time Series (Daily)"][day]["1. open"];
, происходит сбой, потому что она выбирает и получает данные.
Ошибка говорит:
Unhandled Rejection (TypeError): Cannot read property '3. Last Refreshed' of undefined:
42 | setValues() {
> 43 | day = this.state.data["Meta Data"]["3. Last Refreshed"];
| ^ 44 | open = this.state.data["Time Series (Daily)"][day]["1. open"];
45 | higher = this.state.data["Time Series (Daily)"][day]["2. high"];
Приложение невсегда происходит сбой, и он показывает результаты, но компонент рендеринга продолжает вызывать this.fetch_data () и происходит сбой, потому что иногда (например, в 80% случаев) данные не поступают, и я пытаюсь получить к ним доступ.