【问题标题】:how can I add object to array in my react app如何在我的反应应用程序中将对象添加到数组
【发布时间】:2018-06-08 15:23:20
【问题描述】:

我正在学习 React 并尝试创建一个记忆游戏应用程序,在我的应用程序的卡片组件中,如果我点击一张卡片,我想将该卡片推送到一个空数组。但是如果我单击第二张卡片,数组不会保存第一张卡片,或者它不会正确保存,因为每次单击新卡片时道具的值都会改变。我检查了一些类似的问题,但他们发布的问题不同。

import React from 'react';
import '../memoryGameStyle/card.css';

class Card extends React.Component{
    constructor(props){
        super(props);
        this.state={card:'' }
    }
    onCardClick=()=>{
        const array=[]
        const newCard={...this.props.card,show:true}
        this.setState({card:newCard})
    }
    render(){...}
}

export default Card

我正在尝试将新卡推送到 onCardClick 中的阵列。我有两个道具,一个会显示我点击的卡片,另一个会显示所有卡片的数组。我尝试使用 filter()、push()、spread 运算符,到目前为止都不起作用,我一定做错了什么。请帮忙,谢谢

【问题讨论】:

  • 您正在覆盖您所在州的 card 变量。它将如何保存
  • 道具不应该改变。 this.props.card 包含什么?
  • @Sujit.Warrier,卡片道具包含卡片的颜色、显示和匹配状态以及 ID。颜色是在另一个组件中随机生成的,我将使用 show 和 match 来检查卡片显示是显示还是隐藏
  • @Sujit.Warrier 我有另一个包含所有卡片的 props.cards,我可以使用 this.setState({card:{...newCard,show:true}}) 更改卡片状态。但问题还是一样

标签: arrays reactjs add react-props


【解决方案1】:

你在你的状态下写完了 card 变量。改为这样做

 constructor(props){
    super(props);
    this.state={card:[] }
}

免责声明:以下解决方案假定 newCard 包含所选卡片

onCardClick=()=>{
    const {card} =this.state;
    const newCard= //get selected card
    card.push(newCard);
    this.setState({card:newCard})
}

【讨论】:

  • 我正在尝试,但是在我第二次单击后出现“card.push 不是函数”错误,我也试图将卡推送到我的 onCardClick 中的空数组,但它没有当我使用推送时工作
【解决方案2】:

据我了解,您有两个要求:

  • 显示当前点击的卡片。
  • 显示用户过去点击过的所有卡片。 //Let me know if that's not the case

假设您想要做以上 2 件事,您可以执行以下操作:

state = {
  cards: [],
  showAllClickedCards: true 
}
//"cards" holds the cards clicked by the user
//The most recent clicked card will be at the last in the the array.
//You can toggle "showAllClickedCards" to either show all cards or selected one 

现在你可以在 onCardClick 中进行操作

//Assuming the function is being passed the selectedCard
onCardClick = (selectedCard) => {
     //Do something with selected card
     this.setState(prevState => ({
        cards: [...prevState.cards, selectedCard]
     }))
} 

注意:要显示当前点击的卡片,您可以使用this.state.cards[this.state.cards.length - 1]
希望这会有所帮助

【讨论】:

  • 当然,如果您遇到任何问题,请随时联系我
  • 发生了什么事,当我在一张卡片上单击一次时,数组正确更新,当我再次单击同一张卡片时,数组添加了同一张卡片,这很好。但是如果我点击另一张卡片,数组将更新为该卡片并且不会保留第一张卡片,所以我有一个带有新卡片的新数组
  • 你能通过 gist 分享你的代码吗?我也许可以帮你调试。
  • @Nhat 祝你好运...上面的代码将新卡附加到数组中,保留旧卡。我不确定你的代码发生了什么,如果你分享你的代码,我会为你提供帮助。
  • 谢谢,我放弃了,并尝试了另一种方法来使我的应用程序正常工作。我没用过github,这个app是我主app的一个练习。我知道这很奇怪,但我会在我的主应用程序完成后使用 github。
猜你喜欢
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多