2017-08-26 64 views
0

在我ReactJS項目中,我用取做異步處理,之後取數據,ReactJS時取POST,並使用功能,然後向SETSTATE

我想SETSTATE改變我的本地狀態。但是我得到錯誤返回。

Uncaught (in promise) TypeError: Cannot read property 'setState' of undefined

取功能代碼:

AddDeal(deal){ 
fetch('shops/1/deals',{ 
     method: "POST", 
     body: JSON.stringify(deal), 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
     }, 
    }).then(response => { 
     response.json().then(data =>{ 
      this.setState({deals: data}); // and use this.props.dispatch I get `props` of undefined 
     }) 
     }) 
} 

我看過的都喜歡我的其他問題React.js: loading JSON data with Fetch API and props from object array

那麼,怎樣才能解決呢?

+0

從哪裏調用'AddDeal'方法? –

+0

你綁定'AddDeal'嗎? – Nocebo

+0

你試過將'this'綁定到'AddDeal()'嗎?將包括如何執行'AddDeal()' –

回答

1

當您撥打fetch()時,this的值將是響應,而不是類。您可以將this的值分配給一個變量(通常稱爲self)來保存值。

AddDeal(deal){ 
    const self = this; 
    fetch('shops/1/deals',{ 
    method: "POST", 
    body: JSON.stringify(deal), 
    headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }, 
    }).then(response => { 
    response.json().then(data =>{ 
     self.setState({deals: data}); 
    }) 
    }) 
} 
+1

更好地聲明'AddDeal'就像這樣: 'AddDeal =(deal)=> {...}' – Nocebo

+0

哦!它現在工作!非常感謝。 –

+0

太棒了!請將此答案標記爲已接受,以便人們知道問題已得到解決 –

1

這可能會解決您的問題:

AddDeal = (deal) => { 
    fetch('shops/1/deals',{ 
    method: "POST", 
    body: JSON.stringify(deal), 
    headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }, 
    }).then(response => { 
    response.json().then(data =>{ 
     this.setState({deals: data}); 
    }) 
    }) 
} 
0

嘗試這樣的,這是正確的做法

constructor(props) { 
    super(props) 

    .............. 
    .............. 
    .............. 

    this.AddDeal = this.AddDeal.bind(this) 
} 
0

我會建議你使用愛可信,而不是使用取,因爲與Fetch相比,axios具有更多優秀功能。 你可以從這裏閱讀關於Axios的偉大功能Link