反应孩子与父母的沟通问题

2024-04-12

我正在构建一个猜谜游戏,其中问题和选择逻辑位于名为“问题”的组件中。我无法让应用程序读取问题代码。我希望应用程序中的状态根据子组件中的选择进行更新。

我一直在尝试对解决方案进行逆向工程ReactJS中如何将数据从子组件传递到父组件? https://stackoverflow.com/questions/38394015/how-to-pass-data-from-child-component-to-its-parent-in-reactjs and https://malithjayaweera.com/2018/01/reactjs-passing-data-react-components/ https://malithjayaweera.com/2018/01/reactjs-passing-data-react-components/,但我不清楚如何将其应用到我的项目中。

App:

import React, { Component } from 'react';
import './App.css';
import Timer from "./Timer";
import Questions from "./Questions/Questions.js";
import Results from "../src/Results";

class App extends Component {

  state = {
    totalTrue: 0,
    totalFalse: 0,
  }

  componentDidMount() {
    console.log(`TotalTrue: ${this.state.totalTrue}`);
    console.log(`TotalFalse: ${this.state.totalFalse}`);
  }

  // submit button
  handleFormSubmit = event => {
    event.preventDefault();
    console.log("submit button clicked");
  };

  callbackHandlerFunction = (selectedOption) => {
    this.setState({ selectedOption });
  }

  render() {
    return (

      <div className="parallax">

      <div className="App">

      <div className="wrapper">

      <div className="headerDiv">
      <h1>Pixar Trivia!</h1>
    </div>

    <div className="timerDiv">
      <Timer />
      </div>

      <div className="questionSection">
      <Questions
    handleClickInParent={this.callbackHandlerFunction}
    />
    </div>

    <div>
    <button onClick={this.handleFormSubmit}>Submit</button>
      </div>

    {/* this.state.articles.length > 0 && ...*/}
  <div className="resultsDiv">
      <Results
    totalTrue={this.state.totalTrue}
    totalFalse={this.state.totalFalse}
    />
    </div>

    </div>

    </div>

    </div>
  );
  }
}

export default App;

问题:

import React, { Component } from "react";
import Select from "react-select";
import "./Questions.css";

const answerChoices = [
    {
        id: 1,
        text: "1. The background image is the carpet from Sid's house in Toy Story. What movie inspired it?",
        answers: [
        {
            label: "2001: A Space Odyssey",
            value: false
        },
        {
            label: "The Shining",
            value: true
        },
        {
            label: "One Flew Over the Cuckoo's Nest",
            value: false
        },
        {
            label: "The Godfather",
            value: false
        }
        ]
},
  ---- full questions cut for space. I'm using https://github.com/JedWatson/react-select and the functionality works. ----
{
    id: 8,
    text: "8. Who was the original voice of Marlin from “Finding Nemo”?",
    answers: [
        {
            label: "Albert Brooks",
            value: false
        },
        { 
            label: "Denis Leary",
            value: false
        },
        {
            label: "Brad Garrett",
            value: false
        },
        {
            label: "William H. Macy",
            value: true
        }
        ]
    }
];

class Questions extends Component {

state = {
    answerChoices,
    selectedOption: null,
}

handleChange = (selectedOption) => {
    this.setState({ selectedOption });
    console.log(`Option selected:`, selectedOption);

    const answerValue = selectedOption.value;
    if (answerValue === true) {
        // console.log(answerValue);
        this.setState({totalTrue: this.totalTrue + 1}, () => {
            console.log(`New TotalTrue: ${this.totalTrue}`);
        });
    };
    if (answerValue === false) {
        // console.log(answerValue);
        this.setState({totalFalse: this.totalFalse + 1}, () => {
            console.log(`New TotalFalse: ${this.totalFalse}`);
        });
    };
    this.props.handleClickInParent({selectedOption});

  }

render() {
    // const { selectedOption } = this.state;

    return (

        <div className="questionsDiv">

            <ol>
                {this.state.answerChoices.map(question => {
                return (

                    <div className="individualQuestions" key={question.id}>

                        {question.text}

                        <Select
                            value={this.selectedOption}
                            onChange={this.handleChange}
                            options={question.answers}
                        />

                    </div>

                    )  
                })}
            </ol>

        </div>

    )
  }

}

export default Questions;

我做了一些更改,现在可以正常工作了。

代码现在看起来像这样。

callbackHandlerFunction = ( selectedOption ) => {
  const answerValue = selectedOption.value;
  if (answerValue === true) {
      // console.log(answerValue);
      this.setState({totalTrue: this.state.totalTrue + 1}, () => {
          console.log(`New TotalTrue: ${this.state.totalTrue}`);
      });
  };
  if (answerValue === false) {
      // console.log(answerValue);
      this.setState({totalFalse: this.state.totalFalse + 1}, () => {
          console.log(`New TotalFalse: ${this.state.totalFalse}`);
      });
  };
}  

and

handleChange = (selectedOption) => {

    this.props.handleClickInParent(selectedOption);
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反应孩子与父母的沟通问题 的相关文章

随机推荐

  • Gradle 包装器在 Windows 上的 Android 项目中获取错误的 Java 版本

    我在 Windows 上的 Android 项目中使用 gradle 当我执行时 gradlew version在我的项目路径中 错误显示为Could not determine java version from 12 我确实有已安装 J
  • 奇怪的错误,set::begin() 总是返回 const 迭代器

    为什么 set begin 总是返回一个 const 迭代器而不是标准迭代器 35 int test 36 std set
  • 在 MySQL 中将“描述”转换为“创建表”?

    我们可以从描述中获取 创建表 命令 describe 吗 我有一个表 其描述可以从 DESC TableName 获得 我想知道我是否可以了解该表是如何创建的 以便我可以使用相同的命令执行其他操作 我可以得到 sql dump 但我想知道是
  • F# 从 while 循环中中断

    有什么方法可以做到这一点C C 例如 C 风格 for int i 0 i lt 100 i if i 66 break 最简洁的答案是不 您通常会使用一些高阶函数来表达相同的功能 有许多函数可以让您执行此操作 对应于不同的模式 因此 如果
  • IP 地址的索引范围搜索算法

    给定一个包含 100 亿个以 CIDR 表示法表示的 IPv4 范围或两个 IP 之间的 ACL 列表 x x x x y x x x x y y y y 用于测试给定 IP 地址是否满足一个或多个 ACL 范围条件的有效搜索 索引算法是什
  • 在 MVP android 应用程序中演示者之间进行通信

    我正在使用 MVP 模式构建一个小型测试 Android 应用程序 我有两个片段片段 B 我用于滑动抽屉 和片段 A 主片段 两个片段都有自己的演示者 当我单击滑动绘制时 它应该发送消息或调用片段 A 中的方法来更新视图 我想问一下 两个片
  • 如何使用智能卡和 python 发出 TLS 请求?

    我尝试使用 python 库 请求 与受智能卡保护的网站进行通信 这意味着 SSL 中的强身份验证 您必须提供客户端证书 证书和私钥 由于我使用的是智能卡 因此我无法读取普通保护的私钥 只能读取模数 我可以使用 python 库 PyKCS
  • Firestore 分别按日期和时间查询

    如何按特定日期和时间范围查询我的文档 IE 我想按特定日期范围 01 01 2019 31 01 2019 查询文档 并且从这些日期仅查询上午 10 点到中午 12 点制作的文档 事情会是这样的 let ref db collection
  • Python将一维数组转换为二维数组[重复]

    这个问题在这里已经有答案了 我有一个清单 1 2 3 4 5 6 7 8 我想在 python 中将其转换为 1 2 3 4 5 6 7 8 有人可以帮我解决这个问题吗 接受输入 def chunks l n return l i i n
  • 声明 DNA 的新数据类型

    我从事生物学研究 特别是 DNA 并且经常存在来自基因组测序的数据大小的问题 对于那些没有生物学背景的人 我将快速概述 DNA 测序 DNA 由四个字母组成 A T G 和 C 它们的具体顺序决定了细胞中发生的情况 然而 DNA 测序技术的
  • GitHub 可以用于托管文件(mp3 和图像)吗?

    我正在寻找免费的文件托管服务 它可以让我获得静态链接到每个单独的文件easily 因此 文件 1 png 2 png 3 png 应分配给 URL www something com somepath 1 png http www some
  • Bourbon/Sass:#{$all-text-inputs} 带有悬停或焦点?

    根据波本文档 http thoughtbot com bourbon html5 input types 您可以使用 all text inputs 转动这个 all text inputs border 1px solid green 进
  • 是否可以选择以假的方式列出目标(可能带有描述)?

    在 Ruby RAKE 中 您可以通过以下方式记录您的任务 rakefile desc cleans temp task clean do p cleaning end desc compile the source task compil
  • 复制已过滤的数据子集:合并或事务复制?

    首先感谢您的阅读 我需要复制基于连接过滤器的数据子集 基于与其他表的联接的过滤器 Microsoft 使用联接过滤器 您可以将行过滤器从一个已发布的表扩展到另一个 这是设置 SQL Server 2012 事务复制订阅上的复制源 复制需要是
  • SSRS 2014 数据库设置 - 错误“使用其他版本的 SQL Server 作为报表数据源...”不受支持

    我正在 Windows Server 2012 R2 服务器上设置新的 SQL Server 2014 Enterprise Reporting Services 实例 在 Reporting Services 配置管理器中 当我选择要在其
  • 使更新进度面板位于中心

    我对更新进度面板有疑问 我想在屏幕中间安装更新进度面板 谁能建议我 这样做的想法是什么 您可以使用 css 来做到这一点
  • Environment.Exit 和 Main 中的简单返回 2 之间的区别

    从应用程序外部来看 两者之间有什么区别吗 Environment Exit 2 and static int Main return 2 最明显的区别是您可以从代码中的任何位置调用Environment Exit 除此之外 如果还有其他前台
  • 在 C# 中打印表单/用户控件

    我的计划 包含一个带有几个文本框和一个按钮的表单 默认打印机 设置为Adobe PDF在我的电脑上 My Goal 想要在用户单击 打印 按钮时截取表单 用户控件的屏幕截图 然后屏幕截图将以 pdf 格式保存在桌面上 我的问题 我的代码有以
  • 如何使用itextsharp从表结构PDF中读取数据?

    我在从 pdf 文件读取某些数据时遇到问题 我的文件是结构化的 它包含表格和纯文本 标准解析器从同一行的不同列读取数据 例如 Some Table Header Data Col1a Data Col2a Data Col3a Data C
  • 反应孩子与父母的沟通问题

    我正在构建一个猜谜游戏 其中问题和选择逻辑位于名为 问题 的组件中 我无法让应用程序读取问题代码 我希望应用程序中的状态根据子组件中的选择进行更新 我一直在尝试对解决方案进行逆向工程ReactJS中如何将数据从子组件传递到父组件 https