如何使用变量作为反应中的键来渲染和映射对象
How to render and map an object using a variable as a key in react
我的任务是制作流行游戏节目《家庭仇恨》的克隆版。我无法找到一个很好的方法来获取 "rounds" 列表,每个列表都有一个问题和一系列答案(类似于)
const Data = {
round_1: {
question: "A question",
answers: ["one answer", "second one", ...etc]
},
round_2: {
question: ...,
answers: [...]
},
...etc
}
然后将相关的回合信息渲染到一个组件中,这样玩家就可以前进和后退,并且只将相关的回合信息映射到该组件。类似于:
// Gameboard.js
import React from 'react'
import {Data} from './data'
export default class extends React.Component {
componentWillMount() {
const round = 1
const ansArray = []
const roundQuestion = Data.round_`${round}`.question
const roundAnswers = Data.round_`${round}`.answers.map(ans=>{
ansArray.push(ans)
})
this.setState({
question: roundQuestion,
answers: roundAnswers
})
}
handlePrevRoundClick() {
this.setState({set to prev round})
}
handleNextRoundClick() {
this.setState....
}
render() {
return (
<div>
<RoundInfo roundNum={this.state.round}/>
<Round answers={this.state.answers}/>
</div>
)
}
}
那么显然组件 RoundInfo 和 Round 只是通过 props 传递了它们的信息。我已将它们排除在示例之外,因为我认为我所遵循的逻辑仅适用于此主要 "Gameboard" 组件。如有必要,我会非常乐意扩展。我也意识到这里可能有拼写错误和遗漏。如果有人需要更多内容,我很乐意 jsfiddle。我确实有一个工作原型,我手动创建了每一轮自己的组件,但这绝对不是 React 方式...
总而言之:我要求使用变量在对象列表之间来回 "walk" 的方法,只需将当前回合的信息映射到面板。
谢谢!
好像你已经完成了大部分工作。要完成您所做的事情:
// Gameboard.js
export default class extends React.Component {
componentWillMount() {
// init round to 0
this.setState({
round:0
});
}
handlePrevRoundClick = () => {
const round = this.state.round - 1;
this.setState({round}); // update round
}
handleNextRoundClick= () => {
const round = this.state.round + 1;
this.setState({round}); // update round
}
render() {
const curRoundData = Data['round_'+this.state.round];
return (
<div>
<RoundInfo roundNum={this.state.round}/>
<Round answers={curRoundData.answers}/>
<div onClick={this.handlePrevRoundClick}>Go Prev</div>
<div onClick={this.handleNextRoundClick}>Go Next</div>
</div>
)
}
}
我的任务是制作流行游戏节目《家庭仇恨》的克隆版。我无法找到一个很好的方法来获取 "rounds" 列表,每个列表都有一个问题和一系列答案(类似于)
const Data = {
round_1: {
question: "A question",
answers: ["one answer", "second one", ...etc]
},
round_2: {
question: ...,
answers: [...]
},
...etc
}
然后将相关的回合信息渲染到一个组件中,这样玩家就可以前进和后退,并且只将相关的回合信息映射到该组件。类似于:
// Gameboard.js
import React from 'react'
import {Data} from './data'
export default class extends React.Component {
componentWillMount() {
const round = 1
const ansArray = []
const roundQuestion = Data.round_`${round}`.question
const roundAnswers = Data.round_`${round}`.answers.map(ans=>{
ansArray.push(ans)
})
this.setState({
question: roundQuestion,
answers: roundAnswers
})
}
handlePrevRoundClick() {
this.setState({set to prev round})
}
handleNextRoundClick() {
this.setState....
}
render() {
return (
<div>
<RoundInfo roundNum={this.state.round}/>
<Round answers={this.state.answers}/>
</div>
)
}
}
那么显然组件 RoundInfo 和 Round 只是通过 props 传递了它们的信息。我已将它们排除在示例之外,因为我认为我所遵循的逻辑仅适用于此主要 "Gameboard" 组件。如有必要,我会非常乐意扩展。我也意识到这里可能有拼写错误和遗漏。如果有人需要更多内容,我很乐意 jsfiddle。我确实有一个工作原型,我手动创建了每一轮自己的组件,但这绝对不是 React 方式...
总而言之:我要求使用变量在对象列表之间来回 "walk" 的方法,只需将当前回合的信息映射到面板。
谢谢!
好像你已经完成了大部分工作。要完成您所做的事情:
// Gameboard.js
export default class extends React.Component {
componentWillMount() {
// init round to 0
this.setState({
round:0
});
}
handlePrevRoundClick = () => {
const round = this.state.round - 1;
this.setState({round}); // update round
}
handleNextRoundClick= () => {
const round = this.state.round + 1;
this.setState({round}); // update round
}
render() {
const curRoundData = Data['round_'+this.state.round];
return (
<div>
<RoundInfo roundNum={this.state.round}/>
<Round answers={curRoundData.answers}/>
<div onClick={this.handlePrevRoundClick}>Go Prev</div>
<div onClick={this.handleNextRoundClick}>Go Next</div>
</div>
)
}
}