当前位置: 首页 > 知识库问答 >
问题:

比较特定子div与父状态数据

叶鸿
2023-03-14

我想做一个卡鲁塔风格的纸牌匹配游戏。随机选择一张卡片并显示在页面顶部。所有其他卡片显示在下面。这些卡是从带有"id"(数字)、"前"(字符串)、"后"(字符串)的JSON中提取的。

预期结果:

  • 单击下卡片。
  • 如果下卡的id(?)==较高卡的id,得分,生成新的购物车。

不过,我不知道如何比较这两者。如何从子组件获取信息以与父组件状态进行比较?我不确定如何使用handleComparison()函数在此处找到特定单击div的“x”。

//if(this.props.card[x]. id==this.props.current卡[0]. id){-

import React from "react"
import Header from "./Header"
import { cardData } from "../Cards";


class GameContainer extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      cards: cardData,
      score: 0,
      currentCard: [{}],
    }
  }

  componentDidMount = (e) => {
    const random = Math.floor(Math.random() * cardData.length);
    this.setState({
      currentCard: [cardData[random]]
    })
  }

  handleComparison = (e) => {
    //if (this.props.card[x].id == this.props.currentCard[0].id) -> {score++ - > gen new card}
      console.log('success');
  }

  render() {
    return (
      <div className="wrapper">
        <Header score={this.state.score} />
        <div className="currentCard"  >
          <p>{this.state.currentCard[0].front}</p>
        </div>
        <CardContainer cards={this.state.cards} handleComp={this.handleComparison}/>
      </div>
    )
  }
}

class CardContainer extends React.Component {

    render() {
        return (
            <div id="CardContainer" className="cardContainer">

                {this.props.cards.map((cards, index) => (
                    <div id="card" className="card" onClick={this.props.handleComp}>
                        <p key={index}>{cards.back}</p>
                    </div>
                ))}
                
            </div>);
    }
}
export default GameContainer

共有2个答案

林绪
2023-03-14

你已经接近解决方案了。所有你需要的是传递道具从孩子到父onClark的卡

重写的代码将被删除

js prettyprint-override">class CardContainer extends React.Component {

    render() {
        return (
            <div id="CardContainer" className="cardContainer">

                {this.props.cards.map((card, index) => (
                    <div id="card" className="card" onClick={() => this.props.handleComp(card)}>
                        <p key={index}>{card.back}</p>
                    </div>
                ))}
                
            </div>);
    }
}

然后在handleComp方法中将其保存到状态

class GameContainer extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      cards: cardData,
      score: 0,
      currentCard: [{}],
    }
  }

  // ====

  handleComparison = (card) => {
    //if (card.id == this.state.currentCard[0].id) -> {score++ - > gen new card}
      console.log('success');
  }

  // ====
}
方昊阳
2023-03-14

可以从子组件传递值。

<CardContainer cards={this.state.cards} handleComp={() => this.handleComparison(whatever_value_you_want_here)}/>

然后在父母中

  handleComparison = (whatever_value_you_want_here) => {
    //if (this.props.card[x].id == this.props.currentCard[0].id) -> {score++ - > gen new card}

      console.log('success', whatever_value_you_want_here);
  }
 类似资料:
  • 我想用in参数制作一个过程。更具体地说,我有如下表1 对于相同的COL1和col2/col3,请检查从col4中选择不同的值,例如COL1=600、col2=140/col3=2和col2=140/col3=3返回20和35 并在表1中插入第600、140、3、20、1200、7行(序号)600、140、3、35、1700、8行(序号) 但我不知道如何执行insert语句:( 你能帮我做吗?非常感

  • 我最近使用钩子编写了一个表组件,每次页面加载时都会有一个对后端的API调用,因此同时会显示一个加载微调器,直到有来自API的响应为止。我使用redux作为状态管理,所以当有来自API的响应时,将调度一个操作并更新状态。所以这里的问题是,通常在类组件中,我们可以使用 但是我不知道如何使用钩子实现同样的效果。我还提到了这个stackoverflow问题如何比较反应挂钩的旧值和新值使用效果? 但这个解决

  • 问题内容: 我是Java的新手,我一直在尝试实现一种用于查找三次方程式根的算法。当我计算判别式并尝试检查其相对于零的位置时,就会出现问题。 如果运行它并输入数字“ 1 -5 8 -4”,则输出如下: 我知道问题是因为双精度计算不精确。通常,判别式应为0,但最终变为0.00000000000000001236。 我的问题是,避免这种情况的最佳方法是什么?我是否应该检查数字是否介于零附近的ε之间?还是

  • 我有两个基于同一ecore模型的EMF实例版本。我需要以以下格式准备一个从v1到v2更改的事物列表

  • 问题内容: 这是我的app.js文件-我有一个父状态和两个子状态。两个子视图都需要该对象。 我想使用此已解析的obj来决定子模板 我怎样才能做到这一点? 问题答案: 有一个可行的例子。而不是我们应该使用。这是新的状态def: 我们为什么要使用这种方法?如此处记录: 范本 TemplateUrl … 也可以是返回url的函数。 它采用一个预设参数,该参数不会被注入。 TemplateProvider

  • 问题内容: 假设我的父组件有两个子组件: 我从Child2获得输入,并将其传递给Parent组件(直到现在,我知道该怎么做)。但是然后我需要将该输入传递给Child1以更新其状态。 我怎样才能做到这一点? 问题答案: 希望您能得到主要想法-在Parent组件中创建一个函数,该函数将更改传递给Child1的值。ReactJS:为什么将组件的初始状态传递为prop是反模式?