【问题标题】:How to add items in object - React如何在对象中添加项目 - React
【发布时间】:2019-07-24 01:09:38
【问题描述】:

我在页面上有大约 10 个类似的组件,但名称不同。每个组件都是由 for 循环绘制的,并且有一些按钮和数据。

如果我单击组件上的一个按钮,它会执行 API 调用,并且按钮会变为禁用状态,直到调用成功。

问题是,如果我单击另一个组件上的另一个按钮,按钮会变为禁用(这是预期的),但会在 setState 更改时启用先前单击的按钮(不是预期的)。如何使按钮仅在其自身成功状态时才启用。

这就是为什么我在 clickedRunButton 状态下添加按钮名称,使其成为一个对象,但是如何在 API 调用期间添加此对象中的项目并在调用成功期间将其删除。

不是添加另一个项目而是覆盖它。

    this.state = {
        clickedRunButton:{ pipeName :''}
    }

    onClickRun(params) {        
    const url = `/api/${params}/run`;
    let clickedRunButton = Object.assign({}, 
        this.state.clickedRunButton);    //creating copy of object
    return $.ajax({
        type: 'POST',
        url,
        processData: false,
        contentType: 'application/json',
        beforeSend :() =>{
            clickedRunButton.pipeName = params;  
            clickedRunButton[pipeName] = "run"+params;
            this.setState({
                clickedRunButton
            })
        },

        success: (response) => { 
            if(!response.error) {
                clickedRunButton.pipeName = params;  
                clickedRunButton[pipeName] = '';
                this.setState({
                clickedRunButton
               })
            }
        },

        error: (error) => {
        }
    });
}

【问题讨论】:

    标签: javascript reactjs object setstate


    【解决方案1】:

    看看:

    clickedRunButton.pipeName = params;  
    

    clickedRunButton[pipeName] = "run"+params;
    

    clickedRunButton[pipeName] 中使用的pipeName 未定义。这将导致问题。

    您可以将变量分配给对象中的索引,如下所示:

    clickedRunButton[clickedRunButton.pipeName] = "run"+params
    

    希望对你有帮助

    【讨论】:

    • 其实。我想要做的是创建一个对象,其中键是管道名称,值是“运行”+管道名称。 管道名称将是参数
    • 如何将this.state中的key作为参数??
    • @user3594118 啊,我会更新
    • 哇,这很有效。如果我必须清除价值怎么办?就像在一种方法中我必须将值设置回''。如果我在 setState 中这样做,它会给我错误。 ` _getPipelineStatus = (pipelineName) => { fetch(/api/ndp/v1/admin/pipelines/${pipelineName}) .then(res => res.json()) .then( (result) => { this.setState({ clickedRestartButton[pipelineName] : '' }) ; } ) }`
    • 只设置整个对象:this.setState({clickedRunButton})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2021-07-25
    • 2019-05-13
    • 2018-07-16
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多