2017-03-03 16 views
0

在onclick函數:類型錯誤:(中間值).bind不是一個函數,即使從來就所述Axios的功能I得到以下錯誤消息內試圖對setState({})時綁定函數

TypeError: (intermediate value).bind is not a function 

這可以從setState({})函數中得出。奇怪的是,我已經以正確的方式(我認爲)限制了功能,但它仍然給出了錯誤信息:/

有誰知道什麼可能是錯的?


渲染功能

render() { 
    const { params, subcatItems } = this.props 
    const { subcategory, category } = params 
    const subcat = params ? subcategory : null 

    return (
     <div id="subCategoryList"> 
     <ul> 
      {this.renderDivs(subcatItems, subcat, category)} 
     </ul> 
     </div> 
    ) 
    } 

renderDivs()

renderDivs(subcatItems, subcat, category) { 
    let nestedElement = [] 

    if (this.state.seriesList.length>0) { 
     nestedElement = this.renderNestedList() 
    } 

    let categoryList = [] 
    for (var item in subcatItems) { 
     if (item != '_id') { 
     if (subcatItems[item].parent==category) { 
      console.log('RenderDivs', this.state) 
      categoryList.push(<li 
           onClick={this.onClick.bind(this, item, subcatItems[item].parent)} 
           key={item} 
           className={subcat == replaceSpecialCharactersURLs(item) ? "active" : null}> 
           {subcatItems[item].name} 
           {nestedElement} 
          </li>) 
     } 
     } 
    } 
    return categoryList 
    } 

的onClick()

onClick(subcategory, category) { 
    browserHistory.push('/webshop/'+category+'/'+subcategory) 

    axios.get('/products/subcategory/'+subcategory) 
    .then(function (response) { 
     let seriesList = [] 
     for (var index in response.data) { 
     let seriesName = response.data[index].series 
     if (seriesName) { 
      seriesList.push(seriesName) 
     } 
     } 

     this.setState({ seriesList: 'hej' }.bind(this)) 
    }.bind(this)) 
    .catch(function (error) { 
     console.log(error); 
    }) 
    } 
+0

this.setState:而不是使用回調方法和.bind(this),使用箭頭功能({seriesList: 'HEJ'} .bind(本))我認爲你正在試圖綁定那裏的對象。 –

回答

0

因爲bind(this)setState不要求:

this.setState({ seriesList: 'hej' }.bind(this)) 

簡單地把它寫這樣的:

this.setState({ seriesList: 'hej' }) 

使用此部分:

onClick(subcategory, category) { 
    browserHistory.push('/webshop/'+category+'/'+subcategory); 

    axios.get('/products/subcategory/'+subcategory) 
    .then(function(response) { 
     let seriesList = [] 
     for (var index in response.data) { 
      let seriesName = response.data[index].series 
      if (seriesName) { 
       seriesList.push(seriesName) 
      } 
     } 

     this.setState({ seriesList: 'hej' }) 
    }.bind(this)) 
    .catch(function (error) { 
     console.log(error); 
    }) 
} 

或使用箭頭功能:

onClick(subcategory, category) { 
    browserHistory.push('/webshop/'+category+'/'+subcategory) 

    axios.get('/products/subcategory/'+subcategory) 
    .then(response => { 
     let seriesList = [] 
     for (var index in response.data) { 
      let seriesName = response.data[index].series 
      if (seriesName) { 
       seriesList.push(seriesName) 
      } 
     } 

     this.setState({ seriesList: 'hej' }); 
    }) 
    .catch(error => { 
     console.log(error); 
    }) 
} 

注意

axios.get('/products/subcategory/'+subcategory) 
.then(response => { 
}) 
.catch(error => { 
}) 
+0

感謝您的回答。但是,它仍然不適用於箭頭函數,它在setState之後不能用於移除.bind(this))! – AlfredO

相關問題