2017-03-03 7 views
0

にバインドさにもかかわらず、機能しないで({})axios-関数内Iは、次のエラーメッセージを取得:TypeError例外:(中間値).bind SETSTATEしようとするときI'veがonClickの関数で関数

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()

レンダー
+0

this.setState({seriesList 'HEJ'} .bind(本))私はあなたがバインドしようとしていると思いますそこのオブジェクト。 –

答えて

0

setStatebind(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); 
    }) 
} 

または矢印機能を使用します。

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

は、単純にこのように書きます

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); 
    }) 
} 

:代わりにコールバックメソッドと.bind(this)を使用しての、矢印の機能を使用します。

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

答えをありがとう。しかし、それはまだ矢印関数では動作しませんし、setStateの後に.bind(this))を取り除くと動作しませんでした! – AlfredO

関連する問題