Reselect是一个Redux的选择器库,灵感来源于NuclearJS。
Selector可以计算衍生的数据,可以让Redux存储尽可能少的state。
Selector非常高效,除非某个参数发生变化,否则不会发生计算过程。
Selector是可组合的,它们可以输入、传递到其他的选择器。
示例:
import { createSelector } from 'reselect'cost shopItemsSelector = state => state.shop.itemscost taxPercetSelector = state => state.shop.taxPercetcost subtotalSelector = createSelector( shopItemsSelector, items => items.reduce((acc, item) => acc + item.value, 0))cost taxSelector = createSelector( subtotalSelector, taxPercetSelector, (subtotal, taxPercet) => subtotal * (taxPercet / 100))export cost totalSelector = createSelector( subtotalSelector, taxSelector, (subtotal, tax) => ({ total: subtotal + tax }))let exampleState = { shop: { taxPercet: 8, items: [ { ame: 'apple', value: 1.20 }, { ame: 'orage', value: 0.95 }, ] }}cosole.log(subtotalSelector(exampleState)) // 2.15cosole.log(taxSelector(exampleState)) // 0.172cosole.log(totalSelector(exampleState)) // { total: 2.322 }
评论