2016-08-14 7 views
0

Как изменить состояние события click на кнопках? Теперь у меня есть ошибкаИзменение состояния в forEach loop

неперехваченным TypeError: this.setState не является функцией

Я знаю, что я не могу использовать здесь this.setState, но я не могу понять, где я должен сделать привязку

class Popup extends React.Component { 
    constructor(props){ 
    super(props); 
    this.state = {opened: false}; 
    } 

    componentDidMount(){ 
    var popupOpenBtn = document.querySelectorAll('[data-popup]'); 

    popupOpenBtn.forEach(function(item) { 
     item.addEventListener("click", function(){ 
     this.setState({ 
      opened: true 
     }); 
     }) 
    }); 
    } 
+0

это кнопка, console.log (это) – epascarello

+1

НИКОГДА не мутировать this.state непосредственно, как вызов SetState() впоследствии может заменить мутацию вы сделали. Относитесь к этому государству, как если бы оно было неизменным. – hakiko

+0

Да, вы правы. Но как я могу получить Popup и изменить его состояние? –

ответ

2

Ваш обработчик кликов привязан к кнопке, а не к классу. Попробуйте вместо этого:

class Popup extends React.Component { 
    constructor(props){ 
    super(props); 
    this.state = {opened: false}; 
    } 

    componentDidMount(){ 
    var popupOpenBtn = document.querySelectorAll('[data-popup]'); 
    var component = this; 

    popupOpenBtn.forEach(function(item) { 
     item.addEventListener("click", function() { 
     component.setState({ 
      opened: true 
     }); 
     }) 
    }); 
    } 
+0

В этой ситуации у меня есть Uncaught TypeError: Невозможно прочитать свойство setState неопределенного. Итак, здесь * это * не мой компонент –

+0

Да, это работает! Благодаря! –