Sea*_*ysa 2 javascript reactjs
我从一个简单的 JSX 元素数组开始:
const jsxArray = dataItems.map(item => (
<div>
<Header>{item.title}</Header>
<Paragraph>{item.body}</Paragraph>
<Paragraph customAttribute={item.isActive} >{item.tags}</Paragraph>
</div>
))
Run Code Online (Sandbox Code Playgroud)
在渲染内部,或者更确切地说返回,因为我现在对所有内容都使用函数组件,我想过滤属性isActive被标记为 的JSX 元素true。
return (
{jsxArray
.filter(jsxElement => // want to filter in JSX elements
// that are true for customAttribute keyed to `item.isActive`)
}
)
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到吗?
如果没有一个好的方法,我愿意接受变通办法。
我可以在前面的步骤中简单地过滤数组。但这会导致一些额外的代码重复,因为我在其他地方仍然需要未过滤的 JSX 元素数组。
渲染列表后,您无需对其进行过滤。那时它只是一棵节点树,不再有太多意义了。
相反,您首先过滤项目,然后仅渲染通过您的条件的项目。
const jsxArray = dataItems.filter(item => item.isActive).map(item => (
<div>
<h3>{item.title}</p>
<p>{item.body}</p>
<p customAttribute={item.isActive} >{item.tags}</p>
</div>
))
Run Code Online (Sandbox Code Playgroud)
我可以在前面的步骤中简单地过滤数组。但这会导致一些额外的代码重复,因为我在其他地方仍然需要未过滤的 JSX 元素数组。
不必要。当我自己处理这样的过滤时,我创建了两个变量,一个用于原始的未过滤列表,一个用于过滤后的项目。然后无论您要渲染什么,都可以根据需要选择其中之一。
const [items, setItems] = useState([])
const filteredItems = items.filter(item => item.isActive)
return <>
<p>Total Items: ${items.length}</p>
<ItemList items={filteredItems} />
</>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2787 次 |
| 最近记录: |