2016-11-25 1 views
-1

В настоящее время я извлекаю данные из API - в формате json. Этот API обновляется каждый час - есть ли способ автоматически обновлять эти данные при обновлении API? В настоящее время я использую,Получение данных из API - автоматическое обновление в response.js

componentDidMount() { 
    var component = this; 
    var MY_ACCESS_KEY = "REDACTED FOR PRIVACY REASONS"; 
    var MY_CHOSEN_CURRENCIES = "USD,JPY,CAD,RUB,CNY,GBP,EUR,BTC,CHF" 
     $.get("http://apilayer.net/api/live?access_key=" + MY_ACCESS_KEY + "&currencies=" + MY_CHOSEN_CURRENCIES + "&format=1", function(data) { 
     component.setState(data) 
     }); 
    } 

в пределах моего класса реагирующих компонентов. Это в пределах распространяется React.Component метод - если это делает тонкое различие, например:

class TickerTrader extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = {}; 
    } 

    componentDidMount() {... 

    } 
+0

Розетки могут быть одним из вариантов – Shota

ответ

-1

Я обновил свой ответ с полным компонентом и jsFiddle ...

https://jsfiddle.net/nxwbeb9k/5/

Вы можете запускать вызов API каждый час, используя window.setInterval(). Было бы также разумно очистить интервал, когда компонент будет размонтирован.

class TickerTrader extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = {}; 
    } 

    componentDidMount() { 
    var MY_ACCESS_KEY = "REDACTED FOR PRIVACY REASONS"; 
    var MY_CHOSEN_CURRENCIES = "USD,JPY,CAD,RUB,CNY,GBP,EUR,BTC,CHF"; 

    const getQuotes =() => { 
     $.get("https://apilayer.net/api/live?access_key=" + MY_ACCESS_KEY + "&currencies=" + MY_CHOSEN_CURRENCIES + "&format=1", (data) => { 
     this.setState(data); 
     }); 
    }; 

    // Fire once, immediately 
    getQuotes(); 

    // Fire every 'n' milliseconds (5 seconds shown here, 1 hour is 3600000 ms) 
    this._interval = window.setInterval(getQuotes, 5000); 
    } 

    componentWillUnmount() { 
    this._interval && window.clearInterval(this._interval); 
    } 

    render() { 
    const { error, quotes } = this.state; 

    let list; 

    if (error) { 
     list = (
     <h3>{error.info}</h3> 
    ); 
    } 

    if (quotes) { 
     list = (
     <ul> 
      { 
      Object 
       .keys(quotes) 
       .map(key => <li>{key}: {quotes[key]}</li>) 
      } 
     </ul> 
    ); 
    } 

    if (!list) { 
     list = (
     <div>"Loading..."</div> 
    ); 
    } 

    return (
     <div> 
     {new Date().toString()} 
     {list} 
     </div> 
    ) 
    } 
} 

ReactDOM.render(
    <TickerTrader />, 
    document.getElementById('container') 
); 
+0

Благодарим вас за то, что потратили на это время. Тем не менее, я получаю много NaN, а не фактические значения ...? Любые идеи ... –

+0

Нет, извините, я ничего не знаю о ваших данных или API. Я не вижу нигде в вашем примере кода, который будет ссылаться на числа или NaN. Я думаю, вам придется опубликовать весь свой код или отдельный вопрос. –

+0

Не могли бы вы посмотреть, работает ли он с моим ключом доступа: 4a368d8077807c97b3aff9415a4d4995 –

Смежные вопросы