한 줄이 잘 작동합니다.
render: function () {
return (
{[1,2,3].map(function (n) {
return <p>{n}</p>
}}
);
}
여러 줄이 아님
render: function () {
return (
{[1,2,3].map(function (n) {
return (
<h3>Item {n}</h3>
<p>Description {n}</p>
)
}}
);
}
감사.
답변
태그를 함수 호출로 생각하십시오 ( docs 참조 ). 그러면 첫 번째는 다음과 같습니다.
{[1,2,3].map(function (n) {
return React.DOM.p(...);
})}
그리고 두 번째 :
{[1,2,3].map(function (n) {
return (
React.DOM.h3(...)
React.DOM.p(...)
)
})}
이제 두 번째 스 니펫이 실제로 의미가 없다는 것이 분명합니다 (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 / 섹션으로 래핑하는 것이 장기적으로 더 좋습니다.
답변
배열 반환에 대한 오래된 답변이 더 이상 적용되지 않는 것 같습니다 (@ dogmatic69 가 주석에 썼 듯이 React ~ 0.9 이후 ).
문서 에서는 단일 노드를 반환해야한다고 말합니다.
최대 JSX 루트 노드 수
현재 구성 요소의 렌더링에서는 하나의 노드 만 반환 할 수 있습니다. 예를 들어 반환 할 div 목록이있는 경우 구성 요소를 div, 범위 또는 기타 구성 요소로 래핑해야합니다.
JSX가 일반 JS로 컴파일된다는 것을 잊지 마십시오. 두 함수를 반환하는 것은 실제로 구문 상 의미가 없습니다. 마찬가지로 삼항에 둘 이상의 자식을 넣지 마십시오.
대부분의 경우 간단히 a <div>
또는 <span>
.
제 경우에는 여러 <tr>
s 를 반환하고 싶었습니다 . 나는 그것들을 포장했습니다 <tbody>
– 테이블은 여러 개의 몸체를 가질 수 있습니다.
편집 : React 16.0부터 각 요소에 https://facebook.github.io/react/blog/2017/09/26/react-v16.0.html 이있는 한 배열 반환이 다시 허용됩니다 key
. # new-render-return-types-fragments-and-strings
편집 : 16.2 당신이 가진 요소의 목록 둘러싸고 있습니다 반작용 <Fragment>…</Fragment>
또는 심지어 <>…</>
, 당신은 배열에 그것을 선호하는 경우 : https://blog.jmes.tech/react-fragment-and-semantic-html/
답변
에서 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> ); }
key는 Fragment에 전달할 수있는 유일한 속성입니다. 향후 이벤트 핸들러와 같은 추가 속성에 대한 지원을 추가 할 수 있습니다.
답변
또한 React 구성 요소 내의 일부 도우미 함수에서 여러 목록 항목을 반환 할 수 있습니다. key
속성 과 함께 html 노드 배열을 반환하십시오 .
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>,
]
}
}
답변
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
답변
업데이트 됨
React Fragment를 사용하십시오. 간단 해. 단편 문서에 대한 링크 .
render() {
return (
<>
{[1,2,3].map((value) => <div>{value}</div>)}
</>
);
}
이전 답변-구식
React> 16에서는 react-composite를 사용할 수 있습니다 .
import { Composite } from 'react-composite';
// ...
{[1,2,3].map((n) => (
<Composite>
<h2>Title {n}</h2>
<p>Description {n}</p>
</Composite>
))};
물론 react-composite를 설치해야합니다.
npm install react-composite --save
답변
그것은 단편 반응에 의해 간단 <></>
하고 React.Fragment
:
return (
<>
{[1, 2, 3].map(
(n, index): ReactElement => (
<React.Fragment key={index}>
<h3>Item {n}</h3>
<p>Description {n}</p>
</React.Fragment>
),
)}
</>
);