Как добавить элементы в объект - React

У меня есть около 10 похожих компонентов на странице с разными именами. Каждый компонент рисуется циклом for и имеет несколько кнопок и данных.

Если я нажимаю одну кнопку на компоненте, он выполняет вызов API, и кнопки становятся отключенными до тех пор, пока вызов не будет выполнен успешно.

Проблема заключается в том, что если я нажму другую кнопку на другом компоненте, кнопка станет отключенной (что ожидается), но активирует ранее нажатую кнопку (не ожидается) при изменении setState. Как я могу включить кнопку только тогда, когда она находится в своем собственном состоянии успеха.

Вот почему я добавляю имена кнопок в состояние clickedRunButton, делая его объектом, но как добавить элементы в этот объект во время вызова API и удалить его во время успешного вызова.

Instead of adding another item its overwriting it.

    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) => {
        }
    });
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
957
1

Ответы 1

Взгляни на:

clickedRunButton.pipeName = params;  

а также

clickedRunButton[pipeName] = "run"+params;

pipeName используется в clickedRunButton[pipeName] не определено. Это вызовет проблемы.

Вы можете присвоить переменную индексу в объекте следующим образом:

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

Надеюсь это поможет

О, на самом деле. Что я хочу сделать, так это создать объект, где ключом является имя конвейера, а значением является «запустить» + имя конвейера. Имя конвейера будет params

user3594118 02.03.2019 20:38

Как сделать ключ в this.state параметрами??

user3594118 02.03.2019 20:39

@ user3594118 Ааа, я обновлю

Miroslav Glamuzina 02.03.2019 23:29

вау это работает. Что делать, если мне нужно очистить значение? как в одном методе, я должен установить значение обратно в ''. Если я сделаю это в setState, это выдаст мне ошибку. ` _getPipelineStatus = (pipelineName) => { fetch(/api/ndp/v1/admin/pipelines/${pipelineName}) .then(res => res.json()) .then( (result) => { this.setState({ clickedRestartButton[pipelineName] : '' }); } }`

user3594118 04.03.2019 06:43

просто установите весь объект: this.setState({clickedRunButton})

Miroslav Glamuzina 04.03.2019 06:53

Другие вопросы по теме