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()
中的回调函数设置为指向组件的此
的箭头函数这是否回答了您的问题?将中的回调函数设置为指向组件的此
的箭头函数