2015-02-16 1 views
2

У меня есть приложение-приложение, которое запрашивает локальную точку HTTP и возвращает данные каждые несколько секунд. Каждый раз, когда возвращается запрос ajax, я упаковываю часть информации, возвращаемую в объект, и добавляю этот объект к массиву. Это означает, что каждый раз, когда Аякс вызов возвращается, я долженвременно хранить данные в компоненте без использования состояния

  1. получить массив из состояния
  2. добавить новый массив заявить после того как я добавить объект в массив

В результате из этого постоянно обновляемого состояния мое приложение React автоматически отображает (&). Ничего не изменилось в пользовательском интерфейсе в результате добавления к объекту массива (а затем сохранения массива в состоянии), но React Renders автоматически.

Вопрос: Есть ли способ получить массив для различных вызовов функций в компоненте без использования состояния?

var arr = this.state.arrayOfObjects.slice(); 
    obj = {}; 
    var timeStamp = Date.now(); 
    obj['stuffFromApi'] = apiStuff; 
    obj['timeStamp'] = timeStamp; 
    arr.push(obj);  
    this.setState({ arrayOfObjects: arr}); 
+0

Возможный дубликат [Где наилучшее место для размещения значения, которое вычисляется один раз по первоначальному параметру ввода и никогда не менялось снова, в ReactJS?] (Http://stackoverflow.com/questions/28338913/where -is-the-best-place-to-put-a-value-which-computed-once-by-the-initial-pas) – FakeRainBrigand

+0

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

ответ

2

Вы можете просто использовать переменный экземпляр:

this.arrayOfObjects = this.arrayOfObjects || []; // can also be initialized in componentWillMount method. 
obj = {}; 
var timeStamp = Date.now(); 
obj['stuffFromApi'] = apiStuff; 
obj['timeStamp'] = timeStamp; 
this.arrayOfObjects.push(obj); 

Тогда вы можете получить доступ к this.arrayOfObjects из других функций тоже.