【发布时间】:2020-04-07 03:33:04
【问题描述】:
在这个应用程序中,您可以通过点击特定比赛的GOAL 按钮来更改足球比赛的比分。问题是我的匹配保存在状态中,我使用map 方法渲染它们,我不能为每个匹配动态使用 setState。
App.js
import React from 'react';
import Match from './components/Match';
import './App.css';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
games: [
{
home: {
team: "Bruges",
score: 0
},
guests: {
team: "Real Madrid",
score: 0
}
},
{
home: {
team: "Atletico Madrid",
score: 0
},
guests: {
team: "Lokomotiv",
score: 0
}
}
]
};
this.goal = this.goal.bind(this);
};
goal(parent) {
let rand = Math.round(Math.random());
if(rand) {
this.setState((prevstate) => ({parent: prevstate.parent.home.score + 1}))
} else {
this.setState((prevstate) => ({parent: prevstate.parent.guests.score + 1}))
}
}
render() {
return (
<div className="App">
{this.state.games.map((item, index) => {
return (<Match
key={index}
home={item.home.team}
homeScore={item.home.score}
guests={item.guests.team}
guestsScore={item.guests.score}
goal={() => this.goal(item)}
/>);
})}
</div>
);
}
}
Match.js
import React from 'react';
import '../App.css'
const Match = props => {
return(
<div className="match-container">
<span className="name-container">{props.home} </span>
<span className="score-container">{props.homeScore}</span>
<button onClick={props.goal}>GOAL</button>
<span className="score-container">{props.guestsScore} </span>
<span className="name-container">{props.guests} </span>
</div>
);
}
export default Match;
我认为我的问题出在goal 方法中,因为我认为我不能传递参数并在setState 中使用它。
我没有找到与这个特定问题相关的答案。
【问题讨论】:
-
你想更新点击按钮的值吗?
-
@VahidAkhtar 我想更新 homeScore 或 guestScore
-
游戏必须是数组吗?如果它是一个每个游戏都有一个唯一键的对象,那就简单多了。您可以更改实现还是必须使用数组?
-
@JoshPittman 是的,在这种情况下我需要使用数组:/
标签: javascript reactjs state dom-events setstate