Reactjs 从react道具高效计算衍生数据

Reactjs 从react道具高效计算衍生数据,reactjs,redux,reselect,Reactjs,Redux,Reselect,我们正在react/redux应用程序中实现性能优化。这些优化的一部分包括引入重新选择。这对于直接从状态派生的数据非常有效。但是从其他道具中获得的数据呢 例如: 我们有3个组件FeedFeedItem和Contact(Contact是用于显示用户联系信息的组件) FeedItem获取表示提要中的项的对象,提要项的属性之一是actor对象。此对象类似于用户,但有点不同(这很糟糕,但无法更改)。这意味着,如果我想为这个参与者呈现一个联系人,我需要创建一个新对象,将属性从参与者映射到用户。在每个渲染上

我们正在react/redux应用程序中实现性能优化。这些优化的一部分包括引入重新选择。这对于直接从状态派生的数据非常有效。但是从其他道具中获得的数据呢

例如:

我们有3个组件
Feed
FeedItem
Contact
(Contact是用于显示用户联系信息的组件)

FeedItem
获取表示提要中的项的对象,提要项的属性之一是actor对象。此对象类似于用户,但有点不同(这很糟糕,但无法更改)。这意味着,如果我想为这个参与者呈现一个
联系人
,我需要创建一个新对象,将属性从参与者映射到用户。在每个渲染上创建新对象是一种性能反模式,因为我们使用的是浅层相等检查

e、 g代码:

<Contact
  user={{
    photoUrl: actor.photo.smallPhotoUrl,
    Id: actor.id,
    Name: actor.name,
  }}
</Contact>

您可以传递任何要重新选择的选择器方法。它不一定是国家和道具。这恰好是最常见的用例。如果生成的选择器具有任意数量的参数,则可以调用一个选择器

这里有一种方法可以使用它:

函数转换器ActorToContactUser(参与者){
返回{
photoUrl:actor.photo.smallPhotoUrl,
Id:actor.Id,
姓名:actor.Name,
};
}
类ActorContact扩展组件{
构造函数(…参数){
超级(…args);
this.getUser=createSelector(
()=>这个。道具。演员,
convertActorToContactUser
);
}
render(){
返回
}
}

不确定我是否理解正确,但重选能够选择道具:这是针对状态和道具的,我只想基于一个道具高效地计算派生数据这是一个常见的用例吗?这个模式对我来说似乎有很多,你会如何解决它?我添加了一个例子。谢谢!所以只有当this.props.actor发生变化时才会重新计算?是的。。。stackoverflow的最小注释长度是愚蠢的。这不是一个常见的用例,但我想不出任何理由它是无效的。