2 回答
TA贡献1895条经验 获得超7个赞
您需要存储externalData组件的状态。使用渲染此列表map并将当前单击的卡片传递给该toggle方法。在此之后,您可以根据单击的元素更改状态。请参见下面的示例:
import exampleData from 'data.js'
class App extends Component {
constructor () {
super()
this.state = {
cards: [],
}
this.handleToggle = this.handleToggle.bind(this);
}
componentDidMount() {
this.state.setState({ cards: exampleData });
}
handleToggle (card) {
this.setState(prevState => ({
cards: prevState.cards.map(prevCard => {
if (prevCard.id === card.id) {
return {
id: prevCard.id,
isTrue: !prevCard.isTrue
}
}
return prevCard;
})}));
}
render() {
return (
<div className="App">
{this.state.data.map((card) => {
return (
<ReactCardFlip isTrue={card.isTrue}>
<button onClick={() => this.handleToggle(card)}>Flip the card</button>
</ReactCardFlip>
)
})}
</div>
);
}
}
export default App;
TA贡献1835条经验 获得超7个赞
主要是每个项目都应该有自己的 isTure
所以单一状态isTrue无法满足你的需求。
两种方式:
exampleData 在 state
isTure=>arrIsTrue对应每个项目exampleData
data: [
{ id: 1, isTrue: false },
{ id: 2, isTrue: false },
{ id: 3, isTrue: false},
...
]
这些数据可以放在 state
像之后: this.state = { exampleData: exampleData.data }
所以render可以<ReactCardFlip isTrue={obj.isTrue}/>
也handleToggle应该得到当前的切换索引到之后:
<div className="App">
{this.state.exampleData.map((obj, index) => {
return <ReactCardFlip key={index} isTrue={this.state.isTrue}/>
<button onClick={() => handleToggle(index)}>Flip the card</div>
</ReactCardFlip>
})
</div>
然后handleToggle成为:
handleToggle (index) {
const exampleData = this.state.exampleData
exampleData[index] = !exampleData[index].isTrue
this.setState({ exampleData: exampleData })
}
毕竟别忘了 key
添加回答
举报