반응형
쉼표로 구분된 링크 목록 렌더링
쉼표로 구분된 링크 목록을 출력하려고 합니다. 이것이 저의 해결책입니다.
var Item = React.createComponent({
render: function() {
var tags = [],
tag;
for (var i = 0, l = item.tags.length; i < l; i++) {
if (i === item.tags.length - 1) {
tag = <span><Tag key={i} tag={item.tags[i]} /></span>;
} else {
tag = <span><Tag key={i} tag={item.tags[i]} /><span>, </span></span>;
}
tags.push(tag);
}
return (
<tr>
<td>
{item.name}
</td>
<td>
{tags}
</td>
</tr>
);
}
});
더 나은, 더 깨끗한 방법이 없을까?
감사해요.
간단하게
{tags.map((tag, i) => <span key={i}>
{i > 0 && ", "}
<Tag tag={tag} />
</span>)}
React 16 에서는, 한층 더 간단하게 실시할 수 있습니다.
{tags.map((tag, i) => [
i > 0 && ", ",
<Tag key={i} tag={tag} />
])}
칸 아카데미에서 우리는 조력자를 쓴다.intersperse
이 경우:
/* intersperse: Return an array with the separator interspersed between
* each element of the input array.
*
* > _([1,2,3]).intersperse(0)
* [1,0,2,0,3]
*/
function intersperse(arr, sep) {
if (arr.length === 0) {
return [];
}
return arr.slice(1).reduce(function(xs, x, i) {
return xs.concat([sep, x]);
}, [arr[0]]);
}
다음과 같은 코드를 작성할 수 있습니다.
var tags = item.tags.map(function(tag, i) {
return <Tag key={i} tag={item.tags[i]} />;
};
tags = intersperse(tags, ", ");
또는 단순히 목록 항목을 정렬되지 않은 목록에 쓰고 CSS를 사용합니다.
var Item = React.createComponent({
render: function() {
var tags = this.props.item.tags.map(function(i, item) {
return <li><Tag key={i} tag={item} /></li>
});
return (
<tr>
<td>
{this.props.item.name}
</td>
<td>
<ul className="list--tags">
{tags}
</ul>
</td>
</tr>
);
}
});
그리고 CSS:
.list--tags {
padding-left: 0;
text-transform: capitalize;
}
.list--tags > li {
display: inline;
}
.list--tags > li:before {
content:',\0000a0'; /* Non-breaking space */
}
.list--tags > li:first-child:before {
content: normal;
}
import React from 'react';
import { compact } from 'lodash';
// Whatever you want to separate your items with commas, space, border...
const Separator = () => { ... };
// Helpful component to wrap items that should be separated
const WithSeparators = ({ children, ...props }) => {
// _.compact will remove falsey values: useful when doing conditional rendering
const array = compact(React.Children.toArray(children));
return array.map((childrenItem, i) => (
<React.Fragment key={`${i}`}>
{i > 0 && <Separator {...props} />}
{childrenItem}
</React.Fragment>
));
};
const MyPage = () => (
<WithSeparators/>
<div>First</div>
{second && (<div>Maybe second</div>)}
{third && (<div>Maybe third</div>)}
<div>Fourth</div>
</WithSeparators>
);
기능을 발휘하는 기능 컴포넌트.@imos의 응답에 영감을 받았습니다.리액트 16에 대응합니다.
const Separate = ({ items, render, separator = ', ' }) =>
items.map((item, index) =>
[index > 0 && separator, render(item)]
)
<Separate
items={['Foo', 'Bar']}
render={item => <Tag tag={item} />}
/>
이 솔루션에서는<span>
및<br>
구분 기호로 s와 junk:
const createFragment = require('react-addons-create-fragment');
function joinElements(arr,sep=<br/>) {
let frag = {};
for(let i=0,add=false;;++i) {
if(add) {
frag[`sep-${i}`] = sep;
}
if(i >= arr.length) {
break;
}
if(add = !!arr[i]) {
frag[`el-${i}`] = arr[i];
}
}
return createFragment(frag);
}
잘못된 배열 요소도 필터링합니다.일부 주소 필드가 입력되지 않은 주소 형식 지정에 사용했습니다.
키 누락에 대한 경고를 피하기 위해 fragment를 사용합니다.
간단한 것:
{items.map((item, index) => (
<span key={item.id}>
{item.id}
{index < items.length - 1 && ', '}
</span>
))}
위에 있는 훌륭한 대답에 덧붙여 람다는 쉴 새 없이 말을 잇는다.
여러 항목을 쉼표로 구분하려면:
const makeLinks = (x: Result[]) =>
intersperse(<>,</>, map(makeLink, x))
꽤 간결하다
추가 태그가 없는 솔루션
<p className="conceps inline list">
{lesson.concepts.flatMap((concept, i) =>
[concept, <span key={i} className="separator">•</span>]
, ).slice(-1)}
</p>
그런 걸 만들어 내다
기능 • 기능 유형 • 고차 기능 • 부분 적용
가장 쉬운 방법
const elementsArr = ["a", "b", "c"];
let elementsToRender = [] ;
elementsArr.forEach((element, index) => {
let elementComponent = <TAG className="abc" key={element.id}>{element}</TAG>
elementsToRender.push(elementComponent);
if(index !== (elementsArr.length - 1)){
elementsToRender.push(", ");
}
});
render(){
return (
<div>{elementsToRender}</div>
)
}
언급URL : https://stackoverflow.com/questions/23618744/rendering-comma-separated-list-of-links
반응형
'programing' 카테고리의 다른 글
TypeScript: 유형/감축 유형에서 키를 제거합니다. (0) | 2023.03.26 |
---|---|
ASP에서 JSON을 간단한 사전으로 역직렬화하려면 어떻게 해야 합니까?인터넷? (0) | 2023.03.26 |
ReactJS 오류 경고 (0) | 2023.03.26 |
각도 2: ngFor가 완료되면 콜백 (0) | 2023.03.26 |
키 배열과 값 배열을 JavaScript에서 개체로 병합 (0) | 2023.03.26 |