针对输入的参数做计算,只要所有相关的参数值没变,不再重新计算而是直接使用之前缓存的结果。
import { createSelector } from 'reselect'const selectShopItems = state => state.shop.itemsconst selectTaxPercent = state => state.shop.taxPercentconst selectSubtotal = createSelector(selectShopItems, items =>items.reduce((subtotal, item) => subtotal + item.value, 0))const selectTax = createSelector(selectSubtotal,selectTaxPercent,(subtotal, taxPercent) => subtotal * (taxPercent / 100))const selectTotal = createSelector(selectSubtotal,selectTax,(subtotal, tax) => ({ total: subtotal + tax }))const exampleState = {shop: {taxPercent: 8,items: [{ name: 'apple', value: 1.2 },{ name: 'orange', value: 0.95 }]}}console.log(selectSubtotal(exampleState)) // 2.15console.log(selectTax(exampleState)) // 0.172console.log(selectTotal(exampleState)) // { total: 2.322 }
