我有一个包含“配置文件”的数组,如下所示。这存储在导出的变量中,然后我想在我的组件中呈现它们。
const people = [
{
name : "Chuck",
image : "./chuck.png",
skill : "Bowling"
},
{
name : "Arno",
image : './arno.png',
skill : "backflips"
}
]
export default people;
我导入变量(请注意,它包含数百个数据点),并且在我的组件构造函数中,我使用以下内容,
constructor(props) {
super(props)
this.state = { data : people }
为了渲染这些,我然后使用map将它们映射到卡组件中
render() {
let cards = this.state.data.map(function(elem, index) {
return (
<Card
name = {elem.name}
image = {elem.image}
skills = {elem.skill}
key = {elem.name}
zIndex = {1000-`${index}`}
/>
)
})
return (
<Card {pass in props (name, image, skills) to child Card component} />
我的问题是,这是不好的做法吗?一切正常。该应用程序类似于约会应用程序用户界面,其中弹出第一张卡片或数组中的元素,并向我们显示下一张卡片。您还将如何传递大型数组以使用和渲染组件中的元素?
我希望清楚我在这里做什么。谢谢
答案 0 :(得分:4)
在React状态下拥有大数据是完全可以的。您可以在那里存储的内容实际上没有限制,而且React状态本身对其可以存储的大小没有任何限制。
大数据集的问题随渲染数据一起出现。例如,如果您有一个需要渲染数千行的表,它将降低浏览器的速度。不过,我们谈论的是成千上万的条目,根本不成问题的是数百。
如果发现自己必须渲染数千个数据点,则可以使用有助于实现这一目的的组件/库,例如React Virtualized,它只会渲染所需的元素,而不是全部。
如您所见,问题不是您在商店中存储的内容,而是您在中呈现的内容。我的建议是在发现性能问题之前不要担心要渲染的内容,一旦达到这一点,就需要开始进行优化。
除非您确定会遇到性能问题,否则从一开始进行优化可能会使您失去更多在其他地方花费的时间。
答案 1 :(得分:3)
对象内容的大小与将其存储在状态无关紧要。该对象不是复制的,而是被引用的。
但是,如果people
不是由组件管理的,那么它就不是组件状态的一部分,因此state
不在应有的位置。该组件应仅关闭该数据的import
,或使用表示该数据的context,或以道具等形式接收它。
答案 2 :(得分:1)
要专门回答您的问题,以状态存储对象数组是React的方式。
React的文档没有对象数组,但是列表由状态为https://reactjs.org/docs/lists-and-keys.html
的数组组成请注意,这完全取决于用例以及您的应用如何使用这种状态:
答案 3 :(得分:0)
如果以后打算使用setState修改数据,那么这不是一个好主意。因为状态将始终保留人员变量中的值。否则,您可以直接使用人员中的值来渲染组件中的元素