Опрос API React-Rails

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

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

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

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


person Zubatman    schedule 17.03.2016    source источник


Ответы (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)
person rmosolgo    schedule 17.03.2016
comment
Он опрашивает, но только один раз. Как бы вы порекомендовали, чтобы он постоянно проводил опрос? - person Zubatman; 17.03.2016
comment
Ой! У меня было setTimeout вместо setInterval (и аналогично для clearTimeout/clearInterval). Я обновил свой ответ, чтобы использовать setInterval, который продолжит опрос сервера. - person rmosolgo; 17.03.2016

Я бы порекомендовал вам предварительно сформировать вызов ajax в componentDidMount вместо getInitialState.

Ознакомьтесь с этим руководством по загрузке данных ajax. https://facebook.github.io/react/tips/initial-ajax.html

person Terenced    schedule 17.03.2016