【问题标题】:TypeError: (intermediate value).bind is not a function, even though I´ve binded functionTypeError: (intermediate value).bind 不是函数,即使我已经绑定了函数
【发布时间】:2017-03-03 11:27:19
【问题描述】:

在 axios 函数中尝试 setState({}) 时,在 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()

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

【问题讨论】:

  • this.setState({ seriesList: 'hej' }.bind(this)) 我认为您正在尝试将对象绑定到那里。

标签: reactjs onclick this bind


【解决方案1】:

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

注意:不要使用回调方法和.bind(this),而是使用箭头函数:

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

【讨论】:

  • 感谢您的回答。但是,它仍然不能与箭头函数一起工作,并且在 setState 之后删除 .bind(this)) 也不能工作!
  • 为我工作。感谢@AlfredOdling!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多