2017-01-14 3 views
0

Я пытаюсь вызвать функцию setState внутри цикла _.map, но цикл потерял свойство «this», и я не могу использовать setState для этого, потому что это = не определеноИспользовать свойство «this» внутри _.map

cargaDinamica(){ 

    _.map(this.state.redis, function(cache){ 
     obj.url = 'http://localhost:7000/viewlogredis'; 
     ServiceOS(obj) 
     .then(retorno => { 
     console.log("aaaa", this); 
     view = retorno; 
     this.setState({log : view}); 
     }) 
     .catch(err => {throw new Error(err)}); 


    obj = {url : 'http://localhost:7000' + cache.WebService, 
      IPRedis: cache.IPDBMaster, 
      WebService: cache.WebService, 
      log : log}; 
    console.log("CARGA: ", obj); 
    ServiceOS(obj) 
     .then(function(carga) { 
     console.log('CHEGOU AQUI'); 
     console.log("OK"); 
     }) 
     .catch(err => {throw new Error(err)}); 


    }); 

    }, 

это моя реагировать функция/\

+1

передать функцию() {}. Bind (this) с ограниченным контекстом –

ответ

0

Вы должны изменить эту часть

function(cache) 

с

(cache) => 

Функция привяжет его к своей области действия, в то время как функция стрелки будет привязана к этому в контексте, где она была объявлена.

+2

Примечание. Это синтаксис ES6 и может быть поврежден в старых браузерах, вместо этого вы можете предложить '.bind()'. –

+1

Реакт передается до ES5, если я не ошибаюсь, поэтому не беспокойтесь. – DevNebulae

+0

Я знаю, просто размещаю некоторую информацию здесь, если кто-то ищет подобную проблему, но использует только underscorejs, не реагируя. –

0

Предполагая, что это внутри класса, простирающейся React.Component, вы можете связать лексический это внутри конструктора класса:

class YourClass extends React.Component { 
    constructor(props) { 
    super(props); 
    this.cargaDinamica = this.cargaDinamica.bind(this); 
    } 

    cargaDinamica() { 
    your method here 
    } 

Это гарантирует, что «это» указывает на класс сферы внутри вашего метода, как похоже, вы намерены.