2016-03-17 3 views
2

Я новичок в реактиве, я прошел через the official React tutorials о том, как использовать React как автономную услугу и только что прошел через this tutorial, используя рифленую решетку в Rails-приложении, которая для большинства часть, которую я назвал именно тем, что мне нужно. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно реализовать какой-то простой опрос API для моей маленькой страницы React, но я не могу найти документацию в любом месте о том, как наилучшим образом реализовать это в обработчиках.Опрос API React-Rails

Во время учебного пособия он говорит нам использовать pollinterval = 2000 при объявлении источника данных для опроса источника каждые 2000 миллисекунд. Я попытался реализации этого, как следует, но безрезультатно:

@Records = React.createClass 
    getInitialState: -> 
     $.ajax 
     method: 'GET' 
     url: '/records' 
     dataType: 'JSON' 
     success: (response) -> 
      records: response 
     pollinginterval: 2000 
    ... 

К сожалению, когда я загрузить страницу не только не на самом деле отображения содержимого, но это, кажется, не будет запрашивать базу данных на всех - даже на начальном этапе. Это заставляет меня думать, что это не подходящее место для вызова AJAX/установки опроса, но ничего в моем поиске не было особенно полезно.

ответ

2

Как насчет этого подхода?

@Records = React.createClass 
    getInitialState: -> 
    # `this.state.records` is empty now, but will be loaded by AJAX 
    { 
     records: [] 
    } 

    componentDidMount: -> 
    # Ping every 2s 
    @_recordsInterval = setInterval => 
     @_loadRecords() 
     , 2000 
    # Load initial data: 
    @_loadRecords() 

    componentWillUnmount: -> 
    # clean up loose ends: 
    clearInterval(@_recordsInterval) 
    @_recordsRequest?.abort() 

    # ... 

    _loadRecords: -> 
    # Fetch records from the server and store it as `this.state.records` 
    @_recordsRequest = $.get "/records", (data) => 
    @setState(records: data) 
+0

Это опрос, но только один раз. Как бы вы порекомендовали, что я получаю его для опроса постоянно? – ZubatMan

+0

Упс! У меня был 'setTimeout' вместо' setInterval' (а также для 'clearTimeout' /' clearInterval'). Я обновил свой ответ, чтобы использовать 'setInterval', который продолжит опрос сервера. – rmosolgo

+0

Ты лучший - отлично работает! – ZubatMan