gpt4 book ai didi

javascript - this.props 使用 array.map((item, i) 返回未定义

转载 作者:行者123 更新时间:2023-12-03 04:04:00 26 4
gpt4 key购买 nike

我试图将给定数组项的内容作为 prop 传递,然后使用它来触发某些 REST 函数,但是当我传递 item.roomconsole.log 时(this.props.myProp) 后来,我发现打印的内容是未定义的。我已经一步一步地跟踪了我能找到的所有资源,但 Prop 似乎困扰着我的控制台。请帮忙!

失败的代码;

class Lights extends Component {
lumin() {
console.log(this.props.lumer + " clicked!")
}
render() {
return(
<div className="Lights">
<div className="link-wrapper">
{[
{
room: 'Office'
},
{
room: 'Office Bathroom'
},
{
room: 'Neekon Bedroom'
},
{
room: 'Ryan Room'
},
{
room: 'Homework Room'
},
{
room: 'Living Room'
},
{
room: 'Gallery'
},
{
room: 'Guest Bathroom'
},
{
room: 'Dining Room'
},
{
room: 'Kitchen'
},
{
room: 'Master Bedroom'
},
{
room: 'Family Room'
}
].map((item, i) => {
return (
<a onClick={this.lumin.bind(this)} lumer={item.room} className="toggle-text">
{item.room}</a>)
})}
</div>
</div>
)
}
}

最佳答案

您的问题是您正在尝试查看 props来自父组件的子组件。您的lumin()功能在您的 Lights组件,但你路过lumer作为您的<a>的支撑组件。

最简单的修复方法是代替

onClick={ this.lumin.bind(this) }

而是这样做:

onClick={ () => this.lumin(item.room) }

并将房间直接传递给函数(不要尝试读取 this.props.lumer )。

但是,更合适的解决方案是替换您的 <a>使用自定义组件,然后移动 lumin()功能。

// Lights component
[].map(item => <RoomLight lumer={ item.room } key={ i } />)

// RoomLight component
class RoomLight extends React.Component {
lumin() { console.log(this.props.lumer + ' clicked'); }

render() {
return <a onClick={ this.lumin.bind(this) }>{ this.props.lumer }</a>;
}
}

理想情况下,渲染时不要使用箭头函数。它创造了性能冲击。相反,bind()它在构造函数中:

class RoomLight extends React.Component {
lumin() { console.log(this.props.lumer + ' clicked'); }

constructor(props) {
super(props);

this.lumin = this.lumin.bind(this);
}

render() {
return <a onClick={ this.lumin }>{ this.props.lumer }</a>;
}
}

关于javascript - this.props 使用 array.map((item, i) 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com