ReselectRedux 的選擇器庫
Reselect 是一個 Redux 的選擇器庫,靈感來源于 NuclearJS 。
Selector 可以計算衍生的數(shù)據(jù),可以讓 Redux 存儲盡可能少的 state 。
Selector 非常高效,除非某個參數(shù)發(fā)生變化,否則不會發(fā)生計算過程。
Selector 是可組合的,它們可以輸入、傳遞到其他的選擇器。
示例:
import { createSelector } from 'reselect'
const shopItemsSelector = state => state.shop.items
const taxPercentSelector = state => state.shop.taxPercent
const subtotalSelector = createSelector(
shopItemsSelector,
items => items.reduce((acc, item) => acc + item.value, 0)
)
const taxSelector = createSelector(
subtotalSelector,
taxPercentSelector,
(subtotal, taxPercent) => subtotal * (taxPercent / 100)
)
export const totalSelector = createSelector(
subtotalSelector,
taxSelector,
(subtotal, tax) => ({ total: subtotal + tax })
)
let exampleState = {
shop: {
taxPercent: 8,
items: [
{ name: 'apple', value: 1.20 },
{ name: 'orange', value: 0.95 },
]
}
}
console.log(subtotalSelector(exampleState)) // 2.15
console.log(taxSelector(exampleState)) // 0.172
console.log(totalSelector(exampleState)) // { total: 2.322 }評論
圖片
表情
