我正在从teamtreehouse.com制作一个非常基本的React应用程序,并且不断遇到
“ TypeError:无法读取未定义的属性’onPlayerScoreChange’”
即使我正确绑定了我的功能(我认为)
'onPlayerScoreChange'
是Grandparent
组件中的一种方法,当用户单击“ +”或“-”按钮以更改玩家得分时执行。
如果有人可以解释什么地方出了错,那将非常有帮助,因为我认为我是this.onPlayerScoreChange = this.onPlayerScoreChange.bind(this)
在曾祖父母的构造函数中进行设置的。
父组件:
class App extends React.Component {
constructor(props) {
super(props);
this.onPlayerScoreChange = this.onPlayerScoreChange.bind(this)
this.state = {
initialPlayers: props.initialPlayers,
};
}
onPlayerScoreChange(delta, index) {
this.setState((prevState, props) => {
return {initialPlayers: this.prevState.initialPlayers[index].score += delta}
})
}
render() {
return(
<div className = "scoreboard">
<Header title = {this.props.title}/>
<div className = "players">
{this.state.initialPlayers.map(function(player, index) {
return(
<Player
name = {player.name}
score = {player.score}
key = {player.id}
index = {index}
onScoreChange = {this.onPlayerScoreChange}
/>
)
})}
</div>
</div>
)
}}
(组件具有默认的标题道具)
子组件:
class Player extends React.Component {
render() {
return(
<div className = "player">
<div className = "player-name">
{this.props.name}
</div>
<div className = "player-score">
<Counter score = {this.props.score} onChange = {this.props.onScoreChange} index = {this.props.index}/>
</div>
</div>
)
}}
孙子部分:
class Counter extends React.Component {
constructor(props) {
super(props)
this.handleDecrement = this.handleDecrement.bind(this)
this.handleIncrement = this.handleIncrement.bind(this)
}
handleDecrement() {
this.props.onChange(-1, this.props.index)
}
handleIncrement() {
this.props.onChange(1, this.props.index)
}
render() {
return(
<div className = "counter">
<button className = "counter-action decrement" onClick = {this.handleDecrement}> - </button>
<div className = "counter-score"> {this.props.score} </div>
<button className = "counter-action increment" onClick = {this.handleIncrement}> + </button>
</div>
)}}
谢谢!
您尚未绑定要使用的map函数onScoreChange = {this.onPlayerScoreChange}
,
您可以使用绑定或箭头功能进行绑定
需要PS绑定,因为map函数的上下文不同于React Component上下文,因此this
该函数内部不会引用React Components
this
,因此您无法访问React Component类的该属性。
具有箭头功能:
{this.state.initialPlayers.map((player, index)=> {
return(
<Player
name = {player.name}
score = {player.score}
key = {player.id}
index = {index}
onScoreChange = {this.onPlayerScoreChange}
/>
)
})}
带绑定
{this.state.initialPlayers.map(function(player, index) {
return(
<Player
name = {player.name}
score = {player.score}
key = {player.id}
index = {index}
onScoreChange = {this.onPlayerScoreChange}
/>
)
}.bind(this))}
问题内容: 我正在按照本教程进行操作,并且在 将值从一个组件的状态传递到另一个组件 时遇到了一个问题。 当执行组件中的功能时,将引发错误。 什么会导致的是从路过的时候到? 问题答案: 首先,设置更安全的初始数据: 并确保您的ajax数据。 如果您按照上面的两个指示(如“ 演示”)操作,它应该可以工作。 更新:您可以仅使用条件语句包装.map块。
问题内容: 除了添加新笔记,一切似乎都可以在这个小应用程序中使用。按钮位于Board组件上。 我知道这个问题通常是由于未正确绑定“ this”的值引起的。我不确定这是否是这里的问题,或者我是否缺少其他东西。谢谢 演示:http://jsbin.com/pewahi/edit?js,输出 问题答案: 您的代码很好。这可能是JSBin的错误,以及如何使用Babel处理转译。如果将杂项添加到代码的顶部,
问题内容: 我收到以下错误 未捕获的TypeError:无法读取未定义的属性’setState’ 即使在构造函数中绑定了delta之后。 问题答案: 这是由于不受约束。 为了绑定设置在构造函数中: 当前,您正在调用绑定。但是bind返回一个绑定函数。您需要将函数设置为其绑定值。
我在Submit上有一个表单,它必须路由到list.js。当我遇到以下错误时,如何路由到list.js以在单击“添加文章”按钮时显示所有文章 组件/form.js src/index 当我使用react-router dom时,我应该使用react-redux路由器吗?我需要安装一些插件还是withrouter。我不知道。有人能告诉我哪里出了问题吗?
我正在设置一个带有反应的discord机器人,但第二个反应中有一个错误,按编号排列,但我找不到它。这可能是一个循环错误,但我已经尝试更改变量的名称,没有任何帮助。我也为代码的长度感到抱歉,但我已尝试将其缩短到最大值。 点击命令,机器人应该回复一条包含5种可能反应的消息。 如果我按反应1,会出现第二条消息,其中包含嵌入中的描述、不和谐和日期。 在这条消息的底部应该会出现一个反应✅。 除了当我按下这个
为什么我得到这个错误不能读取未定义的触摸属性? 为什么它不能读取,但它可以读取 当我们使用