[英]How to render arrays of arrays in react
Need to render arrays of arrays --> which contain objects需要渲染包含对象的数组数组 -->
On JSX / HTML I should have for every sub-array one <li></li>
tag, inside of that tag render objects from an array when this sub-array is rendered, I should move on next array and render next arrays in new <li></li
tag在 JSX/HTML 上,我应该为每个子数组都有一个<li></li>
标签,在渲染这个子数组时,在该标签内部渲染数组中的对象,我应该继续下一个数组并渲染下一个数组新的<li></li
标签
Problem in my implemntation is cus all sub-arrays are rendered inside of one <li></li>
:我的实现中的问题是因为所有子数组都在一个<li></li>
内呈现:
renderList = () => {
return searchHelpers.logicalExamples.map((tagsArray) =>
tagsArray.map((tag, i) => (
<li className="label">
<button>
<span className="selected">{tag.name}</span>
</button>
</li>
))
);
};
This is object which is used for rendering lists:这是用于渲染列表的对象:
const searchHelpers = {
logicalExamples: [
[
{ name: 'TX Group', tagTypeClass: '' },
{ name: 'AND', tagTypeClass: 'operator' },
{ name: 'Latest News', tagTypeClass: 'new-tag' }
],
[
{ name: 'Pochettino', tagTypeClass: '' },
{ name: 'NOT', tagTypeClass: 'operator' },
{ name: 'Mourinho', tagTypeClass: '' }
],
[
{ name: 'Cristobal Huet', tagTypeClass: '' },
{ name: 'OR', tagTypeClass: 'operator' },
{ name: 'Nico Hischier', tagTypeClass: '' }
],
[
{ name: '(', tagTypeClass: 'new-tag' },
{ name: 'Climate Change', tagTypeClass: 'new-tag' },
{ name: ')', tagTypeClass: 'new-tag' }
]
]
};
So you want each element of logicalExamples
to render as an <li>
.因此,您希望logicalExamples
每个元素都呈现为<li>
。 That looks like this:看起来像这样:
renderList = () => {
return searchHelpers.logicalExamples.map((tagsArray) =>
<li className="label">
// something goes here
</li>
);
};
And for each element of tagsArray
you want a <button>
:对于tagsArray
每个元素,您都需要一个<button>
:
renderList = () => {
return searchHelpers.logicalExamples.map((tagsArray) =>
<li className="label">
{tagsArray.map((tag, i) => (
<button>
<span className="selected">{tag.name}</span>
</button>
}
))
</li>
);
};
I like to use/create a flatMap
function for this kind of scenario.我喜欢为这种场景使用/创建一个flatMap
函数。 I believe lodash
has one, but it's tiny enough if you don't want to bundle in a library of that magnitude:我相信lodash
有一个,但如果你不想捆绑在这么大的库中,它已经足够小了:
function flatMap(items, fn) {
return items.reduce((result, item, i) => result.concat(fn(item, i)), []);
}
You can use it like this:你可以这样使用它:
renderList = () => flatMap(searchHelpers.logicalExamples, (tagsArray) =>
tagsArray.map((tag, i) => (
<li className="label">
<button>
<span className="selected">{tag.name}</span>
</button>
</li>
))
);
Don't forget to add a key
, though!不过,不要忘记添加一个key
!
Update :更新:
OK, wasn't clear on what you needed before.好的,之前不清楚你需要什么。 All you'll need to do is:您需要做的就是:
renderList = () => searchHelpers.logicalExamples.map((tagsArray) => (
<li className="label">
{tagsArray.map((tag, i) => (
<button>
<span className="selected">{tag.name}</span>
</button>
))}
</li>
));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.