Как передать несколько параметров в обработчик onChange для input?
Проблема с обработкой изменений в массиве объектов в React
Я рендерю коллекцию элементов ввода для объектов в массиве. Вот как выглядит мой код:
render: function() {
var ranges = [];
this.props.ranges.map(function(range, index) {
var rangeElement = <Input type="text"
value={range.name} onChange={this.changeRangeName.bind(this)} />;
ranges.push(rangeElement);
}, this);
// рендерим ranges
}
Я могу написать обработчик onChange следующим образом:
changeRangeName: function (event) {
var newName = event.target.value;
},
Однако в этом обработчике мне нужен ID объекта диапазона, который я хочу изменить. Я могу изменить способ создания элементов ввода в функции рендеринга:
var rangeElement = <Input type="text"
value={range.name}
onChange={this.changeRangeName.bind(this, range.id)} />;
Теперь мой обработчик будет получать range.id
в качестве параметра, но теперь у меня нет значения newName
. Я могу получить его с помощью refs:
var rangeElement = <Input type="text"
ref={'range' + range.id}
value={range.name}
onChange={this.changeRangeName.bind(this, range.id)} />;
Это единственное решение, которое я знаю, но я подозреваю, что есть более эффективный способ справиться с этой задачей. Можете подсказать, как лучше организовать обработку изменений в данном случае?
1 ответ(ов)
Да, ваш подход действительно упрощает обработку изменения значения. Таким образом, вы можете напрямую передать идентификатор диапазона в функцию changeRangeName
, что облегчает доступ к нужным данным. Пример вашего кода выглядит корректно:
<Input
type="text"
value={range.name}
onChange={(e) => this.changeRangeName(range.id, e)}
/>
В функции changeRangeName
вы сможете получить id
и событие e
, что позволяет вам более целенаправленно обновлять состояние или выполнять другие действия. Это уменьшает количество лишнего кода и делает его более читаемым. Если у вас есть еще вопросы об обработке изменений или работе с React, не стесняйтесь задавать их!
Как реализовать дебаунс?
Обнаружена ошибка: Невозможное нарушение: Неверный тип элемента: ожидался строковый тип (для встроенных компонентов) или класс/функция, но получен объект
Добавление тега script в React/JSX
"Не используйте Route или withRouter() вне Router при работе с react-router 4 и styled-components в React"
React + Redux — Замедление работы onChange в Input при вводе, когда значение берется из состояния