В sqlite вы получаете только поведение автоинкремента, когда только один целочисленный столбец является первичным ключом. (! d2)
Вы можете получить аналогичный результат, указав id
в качестве единственного первичного ключа, но затем добавив дополнительное уникальное ограничение на id, col3
.
Если это все еще не совсем то, что вы хотите (скажем, id не обязательно должен быть уникальным вообще), вам, вероятно, придется использовать триггер для работы автоинкремента.
Попробуйте вспомнить теги как вызовы функций (см. docs ). Тогда первый будет:
{[1,2,3].map(function (n) {
return React.DOM.p(...);
})}
И второй:
{[1,2,3].map(function (n) {
return (
React.DOM.h3(...)
React.DOM.p(...)
)
})}
Теперь должно быть ясно, что второй фрагмент действительно не имеет смысла (вы можете " t возвращает более одного значения в JS). Вы должны либо обернуть его в другой элемент (скорее всего, то, что вы хотите, таким образом вы также можете предоставить действительное свойство key
), или вы можете использовать что-то вроде этого:
{[1,2,3].map(function (n) {
return ([
React.DOM.h3(...),
React.DOM.p(...)
]);
})}
С сахаром JSX:
{[1,2,3].map(function (n) {
return ([
<h3></h3>, // note the comma
<p></p>
]);
})}
Вам не нужно сгладить результирующий массив, React сделает это за вас. См. Следующий скрипт http://jsfiddle.net/mEB2V/1/ . Опять же: объединение двух элементов в div / раздел, скорее всего, будет более долгосрочным.
Кроме того, вы можете захотеть вернуть несколько элементов списка в некоторой вспомогательной функции внутри компонента React. Просто верните массив узлов html с атрибутом key
:
import React, { Component } from 'react'
class YourComponent extends Component {
// ...
render() {
return (
<ul>
{this.renderListItems()}
</ul>
)
}
renderListItems() {
return [
<li key={1}><a href="#">Link1</a></li>,
<li key={2}><a href="#">Link2</a></li>,
<li key={3} className="active">Active item</li>,
]
}
}
Кажется, старый ответ о возврате массива больше не применяется (возможно, с React ~ 0.9, так как @ dogmatic69 написал в комментарий ).
Документы говорят, что вам нужно вернуть один узел:
Максимальное количество корневых узлов JSX
В настоящее время в рендеринге компонента вы можете вернуть только один узел; Если у вас есть, скажем, список divs для возврата, вы должны обернуть ваши компоненты в div, span или любой другой компонент.
Не забывайте, что JSX компилируется в обычный JS; возвращение двух функций не делает синтаксического смысла. Аналогично, не ставьте более одного ребенка в тройной.
blockquote>Во многих случаях вы можете просто обернуть вещи в
<div>
или<span>
.В моем случае я хотел вернуть несколько
<tr>
s. Я обернул их в<tbody>
- таблице разрешено иметь несколько тел.EDIT: Начиная с React 16.0, возвращение массива, по-видимому, разрешено снова, пока каждый элемент имеет
key
: https://facebook.github.io/react/blog/2017/09/26/react-v16.0.html#new-render-return-types-fragments-and-stringsEDIT: React 16.2 позволяет вам окружать список элементов с помощью
<Fragment>…</Fragment>
или даже<>…</>
, если вы предпочитаете это для массива: https://blog.jmes.tech/react- фрагмент-и-семантико-HTML /
<li>
? Предполагая, что я не могу просто обернуть все это в <ul>
– Banjocat
10 November 2015 в 17:22
<li><ul><li>one</li><li>two</li></ul></li>
, если это работает в вашей ситуации. Или: Развертывание div не будет строгодействующим, но, возможно, оно отлично отображается во всех соответствующих браузерах? Если вы попробуете, сообщите нам об этом.
– Henrik N
10 November 2015 в 19:22
li
в span
или div
не помогли мне. Диверс серьезно нарушил рендеринг, и, по крайней мере, в моем случае, пробел испортил CSS. 2 ¢: Попытка вернуть несколько подмножеств li
s - это запах кода. Мы использовали ul
в качестве своего рода выпадающего меню, и изначально я хотел, чтобы многие компоненты возвращали «разделы» и т. Д. of li
s. В конце концов, было бы лучше поместить весь код меню в один компонент "привязанный & quot; на ul
, чем на shoehorn в li
s из нескольких источников. Я думаю, что это сделало также ментальную модель для UI немного чище.
– ruffin
24 March 2017 в 18:43
С React> 16 вы можете использовать response-composite .
import { Composite } from 'react-composite';
// ...
{[1,2,3].map((n) => (
<Composite>
<h2>Title {n}</h2>
<p>Description {n}</p>
</Composite>
))};
Конечно, должен быть установлен состав-ответ.
npm install react-composite --save
Начиная с версии React v16.0.0, можно возвращать несколько элементов, обернув их внутри Array
render() {
return (
{[1,2,3].map(function (n) {
return [
<h3>Item {n}</h3>.
<p>Description {n}</p>
]
}}
);
}
Также из React v16.2.0 появилась новая функция под названием React Fragments
, который вы можете использовать для обертывания нескольких элементов
render() {
return (
{[1,2,3].map(function (n, index) {
return (
<React.Fragment key={index}>
<h3>Item {n}</h3>
<p>Description {n}</p>
</React.Fragment>
)
}}
);
}
В соответствии с документацией:
Общий шаблон в React для компонента для возврата нескольких элементов. Фрагменты позволяют группировать список детей без добавления дополнительных узлов в DOM.
Фрагменты, объявленные с явным синтаксисом, могут иметь ключи. Для этого используется сопоставление коллекции с массивом фрагментов - например, для создания списка описаний:
function Glossary(props) { return ( <dl> {props.items.map(item => ( // Without the `key`, React will fire a key warning <React.Fragment key={item.id}> <dt>{item.term}</dt> <dd>{item.description}</dd> </React.Fragment> ))} </dl> ); }
ключ является единственным атрибутом, который может быть передан фрагменту. В будущем мы можем добавить поддержку дополнительных атрибутов, таких как обработчики событий.
blockquote>
Здесь вы можете использовать createFragment
.
https://facebook.github.io/react/docs/create-fragment.html
import createFragment from 'react-addons-create-fragment';
...
{[1,2,3].map((n) => createFragment({
h: <h3>...</h3>,
p: <p>...</p>
})
)}
(используя синтаксис ES6 и JSX здесь)
вам сначала нужно добавить пакет react-addons-create-fragment
:
npm install --save react-addons-create-fragment
Преимущество решения Jan Olaf Krems: не реагировать жалуются на недостающие key
Uncaught Error: Invariant Violation: Product.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.
– dogmatic69 21 August 2015 в 14:25<div>{ this.props.foos.map(function() { return <Foo /> }) }</div>
. Но функцияrender
компонента не может вернуть этот массив без его обертывания, например. в div. – Henrik N 2 July 2016 в 22:17