使用reselect库并为商店中的每个商品创建选择器是否值得,即使我所做的只是从商店中访问商品

Dra*_*ver 0 reactjs redux reselect

我的商店看起来像这样

{
  itemA: {val1, val2, val3},
  itemB: {val1, val2, val3},
  ....
}
Run Code Online (Sandbox Code Playgroud)

在我的选择器文件中,我有这样的东西

const getItemAobject(state) => return state.itemA;
const getItemBobject(state) => return state.itemB;
Run Code Online (Sandbox Code Playgroud)

....

const selectItemA = createSelector([getItemAobject], (itemAobject) => itemAobject);
const selectItemB = createSelector([getItemBobject], (itemBobject) => itemBobject);
Run Code Online (Sandbox Code Playgroud)

终于在mapStateToProps我有

mapStateToProps(){
 {
  itemA: selectItemA(state)
  itemB: selectItemB(state)
 }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的选择器没有做任何花哨的事情,我应该使用重新选择吗?我可以轻松地做到这一点

mapStateToProps(){
 {
   itemA: state.itemA
   itemB: state.itemB
 }
}
Run Code Online (Sandbox Code Playgroud)

如果有选择器,使用选择器有什么好处?

mar*_*son 5

在那种特殊情况下,重新选择并没有真正的好处。实际上,示例selectItemAObject选择器根本没有做任何有用的事情,因为“输出选择器”只是返回给定的值。

总体而言,使用选择器的主要原因是:

  • 封装状态查找,因此其余代码库无需确切知道给定数据在状态树中的位置
  • 将复杂的转换逻辑放在一个地方
  • 通过记录查找和转换来提高性能,尤其是在它们很昂贵的情况下。

有关更多信息,请参阅我的文章Idiomatic Redux:使用重新选择选择器进行封装​​和性能