当前位置: 首页 > 知识库问答 >
问题:

ReactJS映射函数找不到未定义的属性

亢嘉茂
2023-03-14

我还在学习ReactJS。我正在挑战自己写一个非常基本的待办事项应用程序(就像一个人一样),我有一个问题,调用onhtml函数。

var List = React.createClass({

  handleClick: function () {
    alert("Clicked!");
  },

  render: function () {

    var list = this.props.items;
    var items = list.map(function(item){
      return (
        <li style={{borderBottom:'1px solid red'}}>
          <label onClick={this.handleClick}>
            <input type="checkbox" />
            {item}
          </label>
        </li>
      );
    });

    return (
      <ul>{items}</ul>
    )
  }
});

这里的问题是不能调用onClick={this.handleClick},因为它不在render函数的返回调用中

要从map函数内部访问handleClick,我需要做什么?

共有3个答案

柴砚文
2023-03-14

您应该将this显式绑定到handleClick函数,以引用React组件而不是map函数,因此您可以按如下方式重构代码:

var items = list.map(renderListItem.bind(this));

并在React类中添加renderListItem方法,如下所示:

renderListItem(item) {
  return (
    <li style={{borderBottom:'1px solid red'}}>
      <label onClick={this.handleClick}>
        <input type="checkbox" />
        {item}
      </label>
    </li>
  );
}
蓟浩旷
2023-03-14

您遇到的问题是,对list.map的调用将使用与render方法不同的this调用传递的函数。

一个简单的解决方法是在外部作用域中抓取此并将其存储在变量中,然后在内联函数中使用该变量。

render: function () {
    var self = this;
 // ^^^^^^^^^^^^^^^^

    var list = this.props.items;
    var items = list.map(function(item){
      return (
        <li style={{borderBottom:'1px solid red'}}>
          <label onClick={self.handleClick}>
                       // ^^^^
            <input type="checkbox" />
            {item}
          </label>
        </li>
      );
    });

    return (
      <ul>{items}</ul>
    )
}
田翔
2023-03-14

map函数的第二个参数是一个值,用于在执行回调时定义的范围。.map(回调(当前值、索引、数组)、此/范围的值\u到\u运行\u)

因此,您可以按如下方式修改map函数:

var items = list.map(function(item){
  return (
    <li style={{borderBottom:'1px solid red'}}>
      <label onClick={this.handleClick}>
        <input type="checkbox" />
        {item}
      </label>
    </li>
  );
}, this);

您还可以使用一个箭头函数,其中this被隐式绑定:

var items = list.map((item) => {
  return (
    <li style={{borderBottom:'1px solid red'}}>
      <label onClick={this.handleClick}>
        <input type="checkbox" />
        {item}
      </label>
    </li>
  );
});
 类似资料:
  • 我从一个xml模式生成java类,对于一个复杂类型,我希望jaxb使用一个现有的类,我有一个外部绑定定制文件。自定义类被解组为正确的,除了该类型的单个属性,该属性从未在java类中填充。 下面是类型/类问题的演示。 模式中定义的内容是: 读取匹配xml文件的代码段是: 在这个xml中阅读: 使用JAXB生成的Thing类(不使用自定义xjb),输出符合预期: 使用只有getters的自定义Thin

  • 我正在使用用于Python的VSCode以及VSCode中启用的适用于Python的微软扩展。 对于Python v3.9.0,如果我尝试寻找函数定义,则会发现找不到定义。 但是,如果我将Conda Virtual环境用于Python 3.7.0,我不会收到错误消息。 可能是什么问题?

  • 问题内容: 我是一个非常新的反应者,我正在尝试从Rails api导入数据,但出现错误 如果我使用react dev工具,则可以在控制台中看到状态,也可以看到联系人,方法是使用有人可以帮忙解决我做错的事情吗?我的组件看起来像这样: 问题答案: 无法读取未定义的属性“ map”,为什么? 因为最初是,并且of 将是 不确定的 。重要的一点是, componentDidMount 将在初始渲染后被调用

  • 问题内容: 我正在使用Reactjs,编写一个菜单组件。 每当我在map函数内部使用“ this”时,它都是未定义的,但在外部,则没有问题。 错误: “无法读取未定义的属性’props’” 有人帮我!:(( 问题答案: 需要第二个参数来设置在映射函数中引用的内容,因此将其作为第二个参数传递以保留当前上下文: 另外,您可以使用ES6 箭头功能自动保留当前上下文:

  • 我正在使用mapstruct从一个DTO映射到另一个DTO。我有多个默认方法,但其中2个返回值为String,并且使用相同的类作为输入参数,这给我带来了“使用java MapStruct的模糊映射方法”错误。 错误:(16,7)Java:在将属性“java.lang.String StatusHistory”映射到java.util.Map:java.util.Map toMap(java.lan

  • 客户服务实施 客户服务界面 客户映射器 主类 错误- 应用程序启动失败 说明: com中的字段映射器。应用服务实施。CustomerServiceImpl需要“com”类型的bean。应用映射器。找不到CustomerMapper“”。 措施: 考虑定义“com”类型的bean。应用映射器。配置中的CustomerMapper。