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

React-在迭代中显示/隐藏文本对始终显示所有文本而不是所选元素-为什么?

司寇书
2023-03-14

我反复浏览相应的问题/答案,当我点击一个特定的问题时,我想在再次点击同一个问题时显示答案/并隐藏它。我将特定答案的类从hide改为show(onclick)。但是,单击会显示或隐藏所有问题/答案。我做错了什么?谢谢

import React, {Component} from "react";
import messages from "./messages.js";

class Faq extends Component {
    constructor() {
        super();
        this.state = {show: false};
    }

    handleClick() {
        this.setState({
            show: !this.state.show
        });
    }

    render() {
        const qa = messages.faqs.category1.map((item, index) => {
            return (
                <div key={index}>
                    <p className="App-intro">
                        <button className="question" onClick={() => this.handleClick()}>{item.question}</button>
                    </p>
                    <p className={!this.state.show ? 'hidden' : 'show'}>{item.answer}</p>

                </div>
            )
        });

        return (
            <div className="App">
                {qa}
            </div>
        );
    }
}   
export default Faq;

问题/答案对象/数组:

export default {
    "faqs": {
        "category 1": [
            {
                "question": "question 1?",
                "answer": "answer 1",
            },
            {
                "question": "question 2?",
                "answer": "answer 2",
            },
            {
                "question": "question 3?",
                "answer": "answer 3",
            }
        ]
        // ...category 2 etc
    }
}

css:

.hidden{
  display: none;
}
.show {
  display: block;
}

共有2个答案

虞航
2023-03-14

你可以这样做。

假设你的问题和答案是成对的。制作一对组件并为切换指定状态。然后将该组件迭代到问题数量的长度。所以,您将不会动态地使用与问题相同的组件,并且每个组件都有自己的状态。

益兴生
2023-03-14

而不是处理类名,你可以渲染/不渲染这样的元素:

{
    this.state.show && <p>{item.answer}</p>
}

你把它放在渲染函数的div中。您还应该在代码中更改一些额外的内容。但这会让你开始。请注意,状态将应用于所有问题,因此您可能需要添加额外的复杂性,例如每个问题的显示状态。

 类似资料:
  • 问题内容: 我第一次弄乱React.js,找不到通过click事件在页面上显示或隐藏内容的方法。我没有在页面上加载任何其他库,所以我正在寻找使用React库的本机方法。到目前为止,这就是我所拥有的。当点击事件触发时,我想显示结果div。 问题答案: 大约在2020年做出反应 在回调中,调用状态挂钩的 setter函数以更新状态并重新渲染: JSFiddle 反应约2014年 关键是使用来更新点击处

  • 问题内容: 按下后如何隐藏“编辑”链接?当我按下编辑键时,是否还可以隐藏“ lorem ipsum”文本? 问题答案:

  • 我有一个AutocompleteTextView,它工作得很好。当我写入一个word时,它会显示相关的结果,但我想在AutoCompleteTextView中显示所有项,而不写入任何word。我怎么能那么做。

  • 我有两个<代码> 当用户从第一个选择框中选择一个值时,我希望第二个选择框只显示连接的值。 我的代码: 因此,当用户从第一个选择框M中选择“test1”时,他在第二个选择框上只会看到“test2”、“test3”和“test4”;第一个框中的“test2”将在第二个框中显示“test6”、“test7”和“test8”。 如何使用JavaScript解决此问题?

  • 我正在做作业(请不要替我做作业)。我已经完成了95%。不过,我在这最后一点上遇到了麻烦。我需要在JText区域显示所选的性别。我必须使用JRadioButton进行性别选择。 我知道JradioButton的工作原理不同。我设置了动作监听器和助记符。我想我搞砸了。看来我可能需要整个团队来设定和行动列表。 非常感谢您的帮助。 以下是我的代码(减去我认为不需要的部分,以便其他人无法复制粘贴作业):

  • 本文向大家介绍jquery显示隐藏元素的实现代码,包括了jquery显示隐藏元素的实现代码的使用技巧和注意事项,需要的朋友参考一下 或  它是个集合肯定没有display属性 $("#firstStep").hide(500);而且可以设置时间;("#firstStep").hide(500);而且可以设置时间; $(".class").css('display','block'); $("#id

  • 显示文本 使用一个 Text 对象 (PIXI.Text)在舞台上展示文本。简单来说,你可以这样使用它: let message = new Text("Hello Pixi!"); app.stage.addChild(message); 这将会在画布上展示文本“Hello, Pixi”。Pixi的文本对象继承自Sprite类,所以它包含了所有相同的属性,像x, y, width, height

  • 问题内容: 我正在尝试创建一个文本框,当选中它时,UIPickerView将打开,并提供可供选择的选项。选择后,UIPickerView将隐藏,并且所选项目将显示在文本框中。我尝试了在网上找到的不同代码,但是无法正常工作。如果有人可以为此建议完整的代码,或者告诉我我在代码中做错了什么,那真是太棒了。非常感谢。 这是我的代码: 问题答案: 如果我了解您的问题,那么您需要: 具有该显示文本选择的 用户