2015-04-21 3 views

ответ

3

Невозможно дальнейшее сокращение кода с помощью текущей версии ECMAScript. Возможно, с ES6 это возможно, в зависимости от того, какие функции будет у языка.

Однако, если вас беспокоит избыточность кода, вы можете добавить этот метод к микшированию и передать его во всех компонентах, которые вам нужны.

Обновление: Благодаря @FakeRainBrigand для обеспечения синтаксиса ES6, что позволяет сократить код: setState({[name]: value});

+1

Это фактически изменит ключ состояния под названием 'name', а не ключ на основе переменной' name'. Поэтому он отличается от исходного вопроса. – zvona

+0

Как говорила zvona, это неверно. Тот факт, что этот синтаксис не работает, является причиной моего вопроса. – Joe

+0

Арг, ты прав, я не знаю, как я пропустил индексированное использование свойства. В этом случае нет альтернативы для сокращения этого кода (по крайней мере, нет в ES5). Однако, если вас беспокоит избыточность кода, вы можете использовать mixins, которые определяют метод 'thingChanged'. – Cristik

2

Это не совсем короткие, но это должно работать:

function thingChanged(name, value) { 
    this.setState(Object.defineProperty({}, name, {value:value})) 
} 
2

ES6 Shorthands:

this.setState({...x});

this.setState({ x });

0

Если вы используете функцию thingChanged для двусторонней передачи данных, то LinkedStateMixin поможет вам сделать это с меньшим количеством кода.

Смежные вопросы