javascript – 在React中迭代数据数组时渲染JSX元素的最有效方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在React中迭代数据数组时渲染JSX元素的最有效方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3373字,纯文字阅读大概需要5分钟。
内容图文
我有一个包含对象的数组.我正在创建此数组的映射以使用span组件呈现名称.
let data = [{"id": "01", "name": "Hi"}, {"id": "02", "name": "Hello"}];
我一直在使用以下两个不同的功能来迭代该对象数组,并使用map来呈现JSX元素.
Functionality1:
import React, { Component } from 'react';
class App extends Component {
render() {
let data = [{"id": "01", "name": "Hi"}, {"id": "02", "name": "Hello"}];
const items = data.map((key, i) => {
return <span key={key.id}>{key.name}</span>;
});
return (
<div>
{items}
</div>
);
}
}
export default App;
Functionality2:
import React, { Component } from 'react';
class App extends Component {
render() {
let data = [{"id": "01", "name": "Hi"}, {"id": "02", "name": "Hello"}];
let rows = [];
data.map((key, i) => {
rows.push(<span key={key.id}>{key.name}</span>);
});
return (
<div>
{rows}
</div>
);
}
}
export default App;
我知道上面两种使用map和渲染JSX元素的方法.除了这两个之外,还有其他方法可以做同样的事吗?如果是这样,推荐哪个?
解决方法:
大多数情况下,我遵循这条规则:
创建一个呈现项目的组件
// in some file
export const RenderItems = ({data}) => {
return data && data.map((d, i) => <span key={d.id}>{d.name}</span>) || null
}
钩住RenderItems
import { RenderItems } from 'some-file'
class App extends Component {
render() {
// you may also define data here instead of getting data from props
const { data } = this.props
return (
<div>
<RenderItems data={data} />
</div>
)
}
}
将数据附加到组件中
const data = [{"id": "01", "name": "Hi"}, {"id": "02", "name": "Hello"}]
<App data={data} />
即使使用第二个代码示例,遵循此规则也不会影响性能.推送数组中的项目并呈现项目.因为,你不是直接在渲染钩子里工作.始终注意渲染钩子不会直接在其中实现任何逻辑.
此外,我不会为使用密钥创建id:
const data = [{"name": "Hi"}, {"name": "Hello"}]
//... and when using index as key
.map((d, i) => <span key={'item-'+i}>
// or,
.map((d, i) => <span key={'item-'+i+'-'+d.name}>
请参阅this post为什么我在使用index作为键时遵循此语法.
更新:
如果要避免使用不必要的html标记,可以使用React.Fragment
export const RenderItems = ({data}) => {
return data &&
data.map(
(d, i) => <React.Fragment key={d.id}>{d.name}</React.Fragment>
) || null
}
// and when rendering, you just return the component
return <RenderItems data={data} />
注意:
>您可以使用<>< />作为< React.Fragment>< /React.Fragment\u0026gt;的别名;只有你没有任何额外的财产.因为我们正在使用它的关键属性,而不是使用它.
>看看this以支持React.Fragment的简短表示法.
使用<>< />的示例:
<>{d.name}</>
这将在html中呈现d.name的值,不带任何标记.当我们专门改造现有设计以应对应用时,这被认为是最好的.或者,可能还有其他情况.就像,我们将显示一个定义列表:
<dl>
<dt></dt>
<dd></dd>
<dt></dt>
<dd></dd>
<dt></dd>
</dl>
我们不想附加不必要的html标签,然后使用Fragment将使我们的生活更轻松:
例:
<>
<dt>{d.term}</dt>
<dd>{d.definition}</dd>
</>
最重要的情况是在tr(TR组件)中渲染td元素.如果我们不这样做,那么我们就违反了HTML的规则.组件将无法正确呈现.在反应中,它会给你一个错误.
UPDATE2:
另外,如果您有以下long list of props:
const {
items,
id,
imdbID,
title,
poster,
getMovieInfo,
addToFavorites,
isOpen,
toggleModal,
closeModal,
modalData,
} = props
您可以考虑解构如下:
const { items, ...other } = props
// and in your component you can use like:
<div modalData={other.modalData}>
但是,我个人更喜欢使用第一个示例代码.这是因为在开发过程中我不需要回顾其他组件或者每次都寻找控制台.在给定的例子中,有像modalData = {}这样的键,所以我们很容易维护modalData = {other.modalData}.但是,如果需要代码如< div> {modalData}< / div>?那么,您也可能同意我的偏好.
内容总结
以上是互联网集市为您收集整理的javascript – 在React中迭代数据数组时渲染JSX元素的最有效方法全部内容,希望文章能够帮你解决javascript – 在React中迭代数据数组时渲染JSX元素的最有效方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。