Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 映射中的ReactJS onClick处理程序返回未定义_Javascript_Reactjs - Fatal编程技术网

Javascript 映射中的ReactJS onClick处理程序返回未定义

Javascript 映射中的ReactJS onClick处理程序返回未定义,javascript,reactjs,Javascript,Reactjs,我想在映射中的上添加一个处理程序: 我的简单功能: 在渲染中: 但它在我的情况下不起作用,仍然返回相同的错误。这很简单,困惑不解,我无法找出我错过了什么,我做错了什么。因为这个在你的map函数中没有定义。使用箭头函数将映射函数绑定到父作用域: const items = this.state.data; let result = items.map((value, i) => { return ( <List.Item key={i}>

我想在
映射中的
上添加一个处理程序:

我的简单功能:

在渲染中:


但它在我的情况下不起作用,仍然返回相同的错误。这很简单,困惑不解,我无法找出我错过了什么,我做错了什么。

因为
这个
在你的map函数中没有定义。使用箭头函数将映射函数绑定到父作用域:

const items = this.state.data;
let result = items.map((value, i) => {
    return (
        <List.Item key={i}>
           <a onClick={this.getFacilities}>{value.user.name}</a>
        </List.Item>
    );
});
const items=this.state.data;
让结果=items.map((值,i)=>{
返回(
{value.user.name}
);
});

因为映射函数中未定义此
。使用箭头函数将映射函数绑定到父作用域:

const items = this.state.data;
let result = items.map((value, i) => {
    return (
        <List.Item key={i}>
           <a onClick={this.getFacilities}>{value.user.name}</a>
        </List.Item>
    );
});
const items=this.state.data;
让结果=items.map((值,i)=>{
返回(
{value.user.name}
);
});

为确保正确绑定
,请使用
映射
回调中的箭头函数:

  let result = items.map((value, i) => {
        return (
            <List.Item key={i}>
               <a onClick={this.getFacilities}>{value.user.name}</a>
            </List.Item>
        );
    });
let result=items.map((值,i)=>{
返回(
{value.user.name}
);
});

为确保正确绑定
,请使用
映射
回调中的箭头函数:

  let result = items.map((value, i) => {
        return (
            <List.Item key={i}>
               <a onClick={this.getFacilities}>{value.user.name}</a>
            </List.Item>
        );
    });
let result=items.map((值,i)=>{
返回(
{value.user.name}
);
});

您需要将
映射
谓词更改为箭头函数(将
上下文绑定到您的组件,而不是
映射
函数)

解决方案2-但如果需要,您可以将
getFacilities
更改为提升功能

getFacilities(e) {
    console.log(e)
}
把这条线保持在构造函数中

this.getFacilities = this.getFacilities.bind(this)
this.getFacilities = this.getFacilities.bind(this)

您需要将
映射
谓词更改为箭头函数(将
上下文绑定到您的组件,而不是
映射
函数)

解决方案2-但如果需要,您可以将
getFacilities
更改为提升功能

getFacilities(e) {
    console.log(e)
}
把这条线保持在构造函数中

this.getFacilities = this.getFacilities.bind(this)
this.getFacilities = this.getFacilities.bind(this)

请不要使用箭头功能

class Name extends Component {
  constructor(props) {
    super(props);
    this.getFacilities = this.getFacilities.bind(this);
  }

  getFacilities(e) {
    // remove Arrow function
    console.log(e);
  }

  render() {
    return (
      <div>
        {this.state.data.map(function(value, i) {
          return (
            <List.Item key={i}>
              <a onClick={this.getFacilities}>{value.user.name}</a>
            </List.Item>
          );
        })}
      </div>
    );
  }
}
类名扩展组件{
建造师(道具){
超级(道具);
this.getFacilities=this.getFacilities.bind(this);
}
设施(e){
//删除箭头功能
控制台日志(e);
}
render(){
返回(
{this.state.data.map(函数(值,i){
返回(
{value.user.name}
);
})}
);
}
}

请不要使用箭头功能

class Name extends Component {
  constructor(props) {
    super(props);
    this.getFacilities = this.getFacilities.bind(this);
  }

  getFacilities(e) {
    // remove Arrow function
    console.log(e);
  }

  render() {
    return (
      <div>
        {this.state.data.map(function(value, i) {
          return (
            <List.Item key={i}>
              <a onClick={this.getFacilities}>{value.user.name}</a>
            </List.Item>
          );
        })}
      </div>
    );
  }
}
类名扩展组件{
建造师(道具){
超级(道具);
this.getFacilities=this.getFacilities.bind(this);
}
设施(e){
//删除箭头功能
控制台日志(e);
}
render(){
返回(
{this.state.data.map(函数(值,i){
返回(
{value.user.name}
);
})}
);
}
}

需要注意的关键是普通函数表达式和新ES6 arrow函数之间的区别。简而言之:与函数表达式不同,箭头函数不维护自己的
this
(或
参数
)-它们从外部词汇环境借用它

是正则函数表达式的一种语法紧凑的替代方法,尽管它没有自己对this、arguments、super或new.target关键字的绑定。箭头函数表达式不适合用作方法,不能用作构造函数

因此,当您在
map
callback
中引用
this
时,this
并不引用该类

因此1)将函数表达式更改为箭头函数:

let result = items.map((value, i) => {
  return (
    <List.Item key={i}>
      <a onClick={this.getFacilities}>{value.user.name}</a>
    </List.Item>
  );
});
但是,有证据表明类字段(使用箭头函数)是这样的,因此最好在构造函数中保留绑定,并对传递的函数使用标准格式:

getFacilities(e) {
  console.log(e)
}
这是需要记住的


PS,从该链接:

“没有必要对每个函数都这样做。这与(在类上)自动绑定一样糟糕。您只需要绑定传递的函数。例如,
onClick={This.doSomething}
。或
fetch.then(This.handleDone)
-Dan Abramov”‏"


需要注意的关键是普通函数表达式和新ES6 arrow函数之间的区别。简言之:与函数表达式不同,arrow函数不维护自己的
this
(或
arguments
)-它们从外部词汇环境借用

是正则函数表达式的一种语法紧凑的替代方法,尽管它没有自己对this、arguments、super或new.target关键字的绑定。箭头函数表达式不适合用作方法,并且不能用作构造函数。”

因此,当您在
map
callback
中引用
this
时,this
并不引用该类

因此1)将函数表达式更改为箭头函数:

let result = items.map((value, i) => {
  return (
    <List.Item key={i}>
      <a onClick={this.getFacilities}>{value.user.name}</a>
    </List.Item>
  );
});
但是,有证据表明类字段(使用箭头函数)是这样的,因此最好在构造函数中保留绑定,并对传递的函数使用标准格式:

getFacilities(e) {
  console.log(e)
}
这是需要记住的


PS,从该链接:

“没有必要对每个功能都这样做。这和(在类上)自动绑定一样糟糕。您只需要绑定传递的函数。e、 g.
onClick={this.doSomething}
。或者
fetch.then(这个.handleDone)
-丹·阿布拉莫夫‏"


.map()
中的回调函数设置为指向组件的
的箭头函数这是否回答了您的问题?将
中的回调函数设置为指向组件的
的箭头函数