让我们想象看起来像这样的数据:
{
{
title: "great track",
tags: ["techno"]
},
{
title: "superb track",
tags: ["house", "90s"]
},
...
}
我在一个html表中渲染,我有一个整个表的组件,以及tr(也就是歌曲 Headers 和曲目)的子组件 . 所以在每一行我想让用户能够访问一个弹出窗口,在弹出窗口中他们可以为歌曲选择一个或多个标签 . 我使用reactstrap做了它,它工作正常 .
我只是对性能感到有点失望,一旦它构建完毕就很好,但我看到当我在每一行添加模态时加载多长时间 . 所以我的第一反应是在父组件中只构建一个模态,然后从子组件中使用它,然后我阅读有关“如果不应该使用父实例,因为它很糟糕”(tm)的文章 .
我理解关于数据流的观点,但在我的例子中,在每一行上都有一个模态等待,而我确信我在屏幕上同时不会有两个,这感觉就像浪费了资源 .
在这个特定的环境中,有人能指出我 Build 这种特征的优雅方式吗?
2 回答
将状态提升到父组件是反应中的常见做法,您可以阅读官方文档中的文章https://reactjs.org/docs/lifting-state-up.html
但是有一个问题,当你在父组件中使用setState时,你的歌曲表会一次又一次地呈现,所以你应该关心它 . 其中一种方法是为Songs表创建PureComponent(如果没有更改道具,此组件将不会重新渲染)
我认为,下面的代码就是其中之一;
当然,在子行中使用模态是浪费资源 . 你需要向父母添加一个模态并使用道具来显示/隐藏它 . 此外,您应该使用您的列表项的关键道具 .
默认情况下,当对DOM节点的子节点进行递归时,React会同时迭代两个子节点列表,并在出现差异时生成突变 .
但是当孩子有钥匙时,React使用钥匙将原始树中的孩子与后续树中的孩子相匹配 . 它对性能有好处 .