我试图在ReactJS中切换组件的状态,但我收到一个错误,说明:

超出了最大更新深度.当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况.React限制嵌套更新的数量,以防止无限循环.

我的代码中没有无限循环,有人能帮忙吗?

组件代码:

import React, { Component } from 'react';
import styled from 'styled-components';

class Item extends React.Component {
    constructor(props) {
        super(props);     
        this.toggle= this.toggle.bind(this);
        this.state = {
            details: false
        } 
    }  
    toggle(){
        const currentState = this.state.details;
        this.setState({ details: !currentState }); 
    }

    render() {
        return (
            <tr className="Item"> 
                <td>{this.props.config.server}</td>      
                <td>{this.props.config.verbose}</td> 
                <td>{this.props.config.type}</td>
                <td className={this.state.details ? "visible" : "hidden"}>PLACEHOLDER MORE INFO</td>
                {<td><span onClick={this.toggle()}>Details</span></td>}
            </tr>
    )}
}

export default Item;

推荐答案

这是因为在render方法中调用toggle会导致重新渲染,而toggle会再次调用并重新渲染,以此类推

这行代码

{<td><span onClick={this.toggle()}>Details</span></td>}

你需要让onClick指的是this.toggle,而不是叫它

fix的问题是这样做的

{<td><span onClick={this.toggle}>Details</span></td>}

Javascript相关问答推荐

脚本.js:3:20未捕获的类型错误:无法读取空的属性(读取addEventHandler)

如何通过onClick为一组按钮分配功能;

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

如何在RTK上设置轮询,每24小时

Chromium会将URL与JS一起传递到V8吗?

将旋转的矩形zoom 到覆盖它所需的最小尺寸&S容器

在Three JS中看不到补间不透明度更改效果

JS:XML insertBefore插入元素

在浏览器中触发插入事件时检索编码值的能力

NG/Express API路由处理程序停止工作

JavaScript不重定向配置的PATH

传递方法VS泛型对象VS事件特定对象

postman 预请求中的hmac/sha256内标识-从js示例转换

有没有办法更改Chart.js 3.x.x中主要刻度的字体?

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色

在HTML5画布上下文中使用putImageData时,重载解析失败

未捕获的不变违规:即使在使用DndProvider之后也应使用拖放上下文

使用Perl Selify::Remote::Driver执行Java脚本时出错

如何在Reaction中设置缺省值, Select 下拉列表,动态追加剩余值?

如何设置时间选取器的起始值,仅当它获得焦点时?