微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将函数作为道具传递时的ReactJS错误

如何解决将函数作为道具传递时的ReactJS错误

最近,我开始在教程的帮助下学习ReactJS,但遇到一个错误,我自己找不到解决方案。我决定要做的第一个项目之一是待办事项列表,当尝试将“ handleChange”功能作为对我的组件的支持时,出现此错误TypeError: Cannot read property 'handleChange' of undefined

这是我的App类的完整代码,因此您可以看到我正在尝试做的事情:

import React from 'react';
import './App.css';
import Content from "./Content"
import TodoItems from "./TodoItems"

class App extends React.Component {

  constructor() {
    super()
    this.state = {
      items: TodoItems
    } 
    this.handleChange = this.handleChange.bind(this)
  }

  handleChange() {
    console.log("Change!")
  }

  render() {
    const items = this.state.items.map(function(item){
      return (<Content key={item.id} todo={item.item} checked={item.completed} handleChange={this.handleChange}/>)
    })
    return (
      <div>
        {items}
      </div>
    )
  }
}

export default App;

我正在从名为TodoItems的文件获取数据,并尝试将它们作为道具传递到Content组件中。一切正常,直到我尝试通过handleChange()函数为止。

我一定做错了。任何帮助将不胜感激。

解决方法

问题出在这里

const items = this.state.items.map(function(item){
      return (<Content key={item.id} todo={item.item} checked={item.completed} handleChange={this.handleChange}/>)
    })

当您使用非数组函数时,它将this和其他内容绑定到其自己的原型中。意思是您的this.handleChange的{​​{1}}实际上是指函数,而不是类

尝试使用它,

this

,因为Arrow函数不会绑定const items = this.state.items.map((item) => { // ^^^^^^^^^^^ return (<Content key={item.id} todo={item.item} checked={item.completed} handleChange={this.handleChange}/>) }) 或任何其他东西。因此this现在应该引用该类

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。