Как мне реализовать динамический флажок в ReactJS?

Я делаю Discord Embed Builder, и пока все работает, как ожидалось, кроме флажка. Я хотел бы знать, как сделать динамический флажок в React, где для каждого поля он может быть выбран как встроенный или нет. Модуль, который я использую для отображения закладных, - встроенный визуализатор.

По сути, я сделал так, чтобы входные данные можно было добавлять и удалять, нажимая кнопки добавления и удаления. Когда данные заголовка и значения введены во входные данные, они будут динамически добавляться к объекту встроенных полей. Как мне реализовать динамический флажок в ReactJS?

Проблема, с которой я столкнулся, - это флажок, где в настоящее время он застрял на отмеченном (true) в ловушке useState, и я хочу, чтобы он делал для каждого добавленного поля, что он должен делать, это когда он отмечен, установите для параметра «inline» значение true или false, когда флажок снят.

Вот мой код:

const [inputList, setInputList] = useState([{ name: "Title", value: "Value", inline: true }]);

// handle input change
const handleInputChange = (e, index) => {
    const { name, value } = e.target;

    const list = [...inputList];

    list[index][name] = value;

    setInputList(list);
};

// handle click event of the Remove button
const handleRemoveClick = index => {
    const list = [...inputList];
    list.splice(index, 1);
    setInputList(list);
};

// handle click event of the Add button
const handleAddClick = () => {
    setInputList([...inputList, { name: "Title", value: "Value", inline: true }]);
};

let embed = {
    embed: {
        fields: inputList
    }
};

return (
    <div>

        <label className = "form-label"><span className = "text-danger">*</span> Fields</label>
        <MDBRow>
            {inputList.map((x, i) => {
                return (
                    <MDBCol size = "sm">
                        <div style = {{ paddingBottom: "5px" }}>
                            <input className = "form-control" name = "name" placeholder = "Field Name" value = {x.name} onChange = {e => handleInputChange(e, i)} />
                        </div>
                        <div style = {{ paddingBottom: "5px" }}>
                            <input className = "form-control" name = "value" placeholder = "Field Value" value = {x.value} onChange = {e => handleInputChange(e, i)} />
                        </div>
                        <div className = "custom-control custom-checkbox">
                            <input type = "checkbox" className = "custom-control-input" name = "inline" checked = {x.inline} onChange = {e => handleInputChange(e, i)} />
                            <label className = "custom-control-label">Inline</label>
                        </div>
                        <div className = "btn-box">
                            {inputList.length - 1 === i && <button className = "btn btn-success btn-sm" onClick = {handleAddClick}>Add</button>}
                            {inputList.length !== 1 && <button className = "btn btn-danger btn-sm" onClick = {() => handleRemoveClick(i)}>Remove</button>}
                        </div>
                    </MDBCol>
                );
            })}
        </MDBRow>
        <br></br>
    </div>

);

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
22
1

Ответы 1

Вы можете передать необязательный третий параметр с помощью e => handleInputChange(e, i, e.target.checked)} в поле флажка.

и получить к нему доступ с помощью:

const handleInputChange = (e, index, customVal) => {
    const { name, value } = e.target;

    const list = [...inputList];

    list[index][name] = customVal!== undefined ? customVal: value;

    setInputList(list);
};

Вот песочница.

Могу подтвердить, что это решение, и оно работает для меня только с обычными флажками. Однако, если я использую MDBReact, это не сработает: (см. mdbootstrap.com/docs/react/forms/checkbox)

NTM Nathan 30.03.2021 17:07

Почему? Он должен работать. Можете создать песочницу, где она не работает?

Domino987 30.03.2021 18:41

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