2016-08-14 98 views
0

如何在按鈕上單擊事件時更改狀態?現在我有錯誤在for循環中更改狀態

遺漏的類型錯誤: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()之後可以代替你做的突變。將this.state視爲不可變的。 – 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

是的,它的工作原理!謝謝! –