Есть ли более простой способ обновления состояния, если у меня есть имя атрибута? Что-то более простое:Как установитьState по значению в React?
function thingChanged(name, value) {
var x = {};
x[name] = value;
this.setState(x)
}
Есть ли более простой способ обновления состояния, если у меня есть имя атрибута? Что-то более простое:Как установитьState по значению в React?
function thingChanged(name, value) {
var x = {};
x[name] = value;
this.setState(x)
}
Невозможно дальнейшее сокращение кода с помощью текущей версии ECMAScript. Возможно, с ES6 это возможно, в зависимости от того, какие функции будет у языка.
Однако, если вас беспокоит избыточность кода, вы можете добавить этот метод к микшированию и передать его во всех компонентах, которые вам нужны.
Обновление: Благодаря @FakeRainBrigand для обеспечения синтаксиса ES6, что позволяет сократить код: setState({[name]: value});
Это не совсем короткие, но это должно работать:
function thingChanged(name, value) {
this.setState(Object.defineProperty({}, name, {value:value}))
}
ES6 Shorthands:
this.setState({...x});
this.setState({ x });
Если вы используете функцию thingChanged
для двусторонней передачи данных, то LinkedStateMixin поможет вам сделать это с меньшим количеством кода.
Это фактически изменит ключ состояния под названием 'name', а не ключ на основе переменной' name'. Поэтому он отличается от исходного вопроса. – zvona
Как говорила zvona, это неверно. Тот факт, что этот синтаксис не работает, является причиной моего вопроса. – Joe
Арг, ты прав, я не знаю, как я пропустил индексированное использование свойства. В этом случае нет альтернативы для сокращения этого кода (по крайней мере, нет в ES5). Однако, если вас беспокоит избыточность кода, вы можете использовать mixins, которые определяют метод 'thingChanged'. – Cristik