2017-12-28 17 views
0

私はリアクションを学んでおり、メモリゲームアプリを作成しようとしています。カードのコンポーネントをクリックすると、そのカードを空の配列。しかし、新しいカードをクリックするたびに、小道具の値が変わるので、2番目のカードをクリックすると最初のカードが保存されず、正しく保存されません。私は同様の質問のいくつかをチェックしたが、投稿された問題は異なっている。私の反応のアプリケーションの配列にオブジェクトを追加する方法

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の配列にプッシュしようとしています。私は2つの小道具を持っています、私はクリックしたカードを表示し、もう1つはすべてのカードの配列を表示します。私はfilter()、push()、spreadオペレータ、これまでの作業を使わないようにしようとしました。助けてください、ありがとう

+0

あなたの状態でカード変数を上書きしています。それはどのように –

+0

小道具を保存すべきではありません変更する必要があります。 this.props.cardには何が含まれていますか? –

+0

@ Sujit.Warrier、card propsには、カードの色、表示と一致のステータス、およびIDが含まれています。色は別のコンポーネントでランダムに生成され、私はカードの表示または非表示を確認するためにショーと一致を使用します – Nhat

答えて

0

あなたはあなたの状態でカード変数を書いています。この代わりに

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}) 
} 
+0

私はそれを試みていますが、私は 'card.pushは関数ではありません'というエラーが発生した2回目をクリックした後も、私のonCardClickの空の配列にカードをプッシュしようとしています。 – Nhat

0

が含まれていることを前提とし、あなたは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]
希望します。

+0

私は今すぐそれを試しています – Nhat

+0

あなたが何か問題を抱えている場合は、私に連絡してください。 –

+0

ここで何が起こったのですか、カードを一度クリックすると、アレイが正しく更新されました。同じカード、配列は良いと同じカードを追加しました。しかし、別のカードをクリックすると、配列はそのカードに更新され、最初のカードは保持されないので、新しいカードで新しい配列が得られます。 – Nhat

関連する問題