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

onClick()事件对一个div有效,但对另一个div无效。为什么?

禄奇希
2023-03-14

使用React,我有一个包含信息的div,其中另一个div包含项目列表。我希望第二个div(列表)可以在单击时折叠。如果我将click listener放在第一个div中,它将工作并显示项目列表。问题是它显示了所有项目的所有列表。我只希望单击项目的列表可见:

render() {
        return (
            this.state.data.map(item => {
                return (  // If I put onClick={this.showCollapsible} here, all lists are loaded
                    <div id={'imageTableItemComponent'} key={item.imageName}>
                        {item.imageName} -
                        {item.tags.length}
                        <div id={'collapsibleTagList'} key={item.tags} onClick={this.showCollapsible}>
                               // *** This onClick does not get triggered ***
                            {this.state.collapsible && <TagTableComponent data={item} onClose={() => this.hideCollapsible()}/>}
                        </div> 
                    </div>
                )
            })

        )
    }

如果我在this.showcollapsable()之后添加括号,我会收到以下警告:

警告:在现有状态转换期间(例如在渲染中)无法更新。渲染方法应该是道具和状态的纯函数。

以下是ShowCollapsable函数:

showCollapsible = () => {
        this.setState( {collapsible: true})
    }

我的列表应该是这样的:

  • 图1

当onClick侦听器位于第一个div中时,所有列表都是这样打开的:

  • 图1-项目1、项目2

共有1个答案

公良琛
2023-03-14

所以我改变了一些事情。首先,当我问这个问题时,我的构造函数看起来像这样:

constructor(props) {
        super(props);
        this.state = {
            data : [],
            collapsible : false,
        }
    }

我已将可折叠更改为null,collapsable:null,并将我的showcollapsable函数更改为如下所示:

showCollapsible = (imageName) => {
        this.setState( {collapsible: imageName})
    }

最后,我在第一个div中调用单击监听器,就像这样:

 render() {
        return (
            this.state.data.map(item => {
                return (
                    <div id={'imageTableItemComponent'} key={item.imageName} onClick={() => this.showCollapsible(item.imageName)}> <!-- This looks fancy, eh? -->
                        {item.imageName} -
                        {item.tags.length}
                        <div id={'collapsibleTagList'} key={item.tags}>
                            {this.state.collapsible === item.imageName && <TagTableComponent data={item} onClose={this.hideCollapsible}/>}
                        </div>
                    </div>
                )
            })

        )
    }

对于将来可能遇到此问题的任何人,不要像我第一次做的那样XD

通过将collapsable设置为true,它改变了整个类的状态,所以我在哪里改变状态并不重要。这样,仅更改具有正确imageName的项的状态。

 类似资料:
  • 如标题所述。我花了一些时间在一个客户的网站上实现一个特定的字体。我在所有需要的css类上实现了字体。 在定义菜单链接的“A”类中,调用字体不起作用。为什么? 参见截图1和2。 例如,在“div.powered-by”类(它也像链接一样工作)上,它可以工作,而在“a”类(它定义菜单链接)上则不行。见截图。 调用字体不起作用: Div.Powered-通过调用字体Works:

  • 所以我有一个简单的Bell类,我正在测试垃圾收集: 如果我运行下面的代码段,它不会被垃圾回收 如果我只是检查参考资料。我住在下面,垃圾被收集了 你们能给我解释一下这是怎么回事吗?

  • 问题内容: 我的html文件中有两个div。我想隐藏第一个div并在html输入按钮事件上显示另一个div 。 这是我的代码, 但这不起作用。任何帮助将不胜感激。 谢谢。 问题答案: 1)在onclick内,您不必使用暗示的“ javascript:”。 2)您检查“显示:阻止”,我总是检查“显示:无”(因为显示也可以是“行内阻止”,等等。) 尝试这个:

  • 问题内容: 我想在容器div中对齐3个div,如下所示: 容器div的宽度为100%(未设置宽度),调整容器大小后,居中div应保持居中。 所以我设置: 但它变成: 有小费吗? 问题答案: 使用该CSS,将您的div放置为这样(浮点数优先): PS 您也可以向右浮动,然后向左浮动,然后居中。重要的是浮子位于“主”中心部分之前。 PPS 您通常希望在此代码片段的最后:该代码片段将垂直延伸以包含两个侧

  • 各位早上好,我正在创建一个产品销售系统,这个话题会有点长,因为我想好好解释一下。 正在用Vaadin+MySQL+springboot+Maven开发的系统 在主屏幕上,我们有一个网格,上面有“新建”、“更改”和“删除”按钮: 当点击new按钮时,将打开一个窗口,开始“销售”产品: 这里的问题是这样的,当我点击“+项”时会出现以下情况: 问题:创建了一个滚动条(在窗口的右边),保存、关闭和+项按钮

  • 问题内容: 在将一个人叠加到另一个人上时,我需要帮助。 我的代码如下所示: 不幸的是,我不能将或嵌套在第一个内部。 如图所示,它必须是两个单独的,但是我需要知道如何将放置在上方和最右侧,并以的顶部为中心。 问题答案: 我建议使用来了解和子元素。