идея заключалась бы в том, чтобы быть в состоянии сделать:
{this.state.list.map((item, key) => <MyComponent {item, key} />)}
что бы вы об этом подумали?
Я склонен сказать нет. Мы много говорили об использовании различных синтаксисов и пытаемся свести их к минимуму. Добавление {...spread}
уже было довольно большим делом.
копия @sebmarkbage
Мы стараемся вести обсуждение синтаксиса по адресу: https://github.com/facebook/jsx . Таким образом, у нас может быть более широкая группа, вносящая свой вклад в этот синтаксис, чтобы он стоил дополнительного веса для языка.
Я думаю, что разница между <Foo {item} />
, <Foo {...item} />
и <Foo item />
может быть слишком запутанной. Последние два уже поддерживаются.
Хотя мне нравится ход твоих мыслей. Если вы твердо уверены в этом, вы должны открыть проблему на https://github.com/facebook/jsx .
https://github.com/facebook/jsx/pull/118
^ Предложение по синтаксису выражения объекта, как обсуждается здесь.
Я думаю, что разница между
, а также может быть слишком запутанным.
Путаница может быть относительной. <Foo item />
не очень полезен, поскольку всегда оценивается как {item: true}. Оглядываясь назад, он кажется очень ограниченным, но я могу понять его поведение из его html-генов. Лично я особого применения не нашел.
{item}
— это сокращение от {item: item}
. {...item}
— сокращение для сглаживания/поверхностного копирования/распространения на новый объект.
как только кто-то поймет, что jsx преобразуется в h(name: string | Component, props: {[name]: any}, ...children)
. ObjectExpression попадает естественным образом.
Сбивает с толку то, что <Foo {x} />
не поддерживается, а <Foo {...x} />
поддерживается. Обходной путь
<Foo {...{x}} />
, что намного более запутанно.