React - 在迭代中显示/隐藏文本对总是显示所有文本而不是选定元素 - 为啥?

Posted

技术标签:

【中文标题】React - 在迭代中显示/隐藏文本对总是显示所有文本而不是选定元素 - 为啥?【英文标题】:React - show / hide for text pairs in iteration always shows all text instead of selected element - why?React - 在迭代中显示/隐藏文本对总是显示所有文本而不是选定元素 - 为什么? 【发布时间】:2018-08-31 19:58:09 【问题描述】:

我正在遍历相应的问题/答案,当我单击特定问题时,我想显示答案/并在再次单击同一问题时将其隐藏。我将类从隐藏更改为显示(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;

【问题讨论】:

变量show 没有链接到问题,但这是一个全局变量 谢谢。如何链接? 您必须以每个问题都有自己的显示/隐藏变量与之关联的方式来构建它。您可以在这个 FAQ 组件中跟踪它,但我认为更简单的方法是为问题创建一个新组件,并且该组件的状态将有一个布尔值来确定它是否隐藏。 @2018code2018 你的对象应该像"question": "question 1?","answer": "answer 1", "show": true 【参考方案1】:

您可以像这样渲染/不渲染该元素,而不是处理类名:


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

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

【讨论】:

【参考方案2】:

你可以这样做。

让我们假设您的问题和答案是成对出现的。 制作一对组件并为切换分配一个状态。然后将此组件迭代到您的问题数量的长度。因此,您将没有动态的与问题相同的组件,并且每个组件都有自己的状态。

【讨论】:

以上是关于React - 在迭代中显示/隐藏文本对总是显示所有文本而不是选定元素 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

React:迭代深度嵌套的对象并显示它们而不会撕裂我的头发

解决一行文本溢出隐藏点击展开之后全部显示并自动换行每行长度一致问题

react 高阶组件实现按钮权限显示与隐藏实现

react 高阶组件实现按钮权限显示与隐藏实现

react中控制元素的显示与隐藏

React js - 显示或隐藏 div