Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Mar 11, 2024. It is now read-only.

Abstraction around reactjs's `reselect`to define trees of selectors

NotificationsYou must be signed in to change notification settings

ConsenSys-archive/reselect-tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wrapper around reactjs'sreselectlibrary for creating trees of selectors.

Designed to allow selectors to be organized into separate namespaces easily,with the ability to identify dependencies between selectors in the tree.

Usage Example

Install with:

npm install --save reselect-tree

Then define a fileselectors.js:

import{createSelectorTree,createLeaf}from"reselect-tree";constselectors=require("./dist/reselect-tree.js");constcreateSelectorTree=selectors.createSelectorTree;constcreateLeaf=selectors.createLeaf;constselect=createSelectorTree({shop:{taxPercent:state=>state.shop.taxPercent},cart:{items:state=>state.cart.items,subtotal:createLeaf(['./items'],(items)=>items.reduce((acc,item)=>acc+item.value,0)),tax:createLeaf(['/shop/taxPercent','./subtotal'],(taxPercent,subtotal)=>subtotal*(taxPercent/100)),total:createLeaf(['./subtotal','./tax'],(subtotal,tax)=>({total:subtotal+tax}))}});letexampleState={shop:{taxPercent:8,},cart:{items:[{name:'apple',value:1.20},{name:'orange',value:0.95},]}}console.log(select.cart.subtotal(exampleState))// 2.15console.log(select.cart.tax(exampleState))// 0.172console.log(select.cart.total(exampleState))// { total: 2.322 }

You can also select non-leaf nodes, for structured representations:

console.log(select.cart(exampleState)){items:[{name:'apple',value:1.2},{name:'orange',value:0.95}],subtotal:2.15,tax:0.172,total:{total:2.322}}

Override Root Selectors

You can override the default aggregation behavior by defining a custom child_. e.g.:

constselect=createSelectorTree({shop:{taxPercent:state=>state.shop.taxPercent},cart:{_:createLeaf(['./items','./total'],(items,total)=>({ items, total})),items:state=>state.cart.items,subtotal:createLeaf(['./items'],(items)=>items.reduce((acc,item)=>acc+item.value,0)),tax:createLeaf(['/shop/taxPercent','./subtotal'],(taxPercent,subtotal)=>subtotal*(taxPercent/100)),total:createLeaf(['./subtotal','./tax'],(subtotal,tax)=>({total:subtotal+tax}))}});

This changes howselect.cart behaves, instead acting asselect.cart._:

console.log(select.cart(exampleState));// { items://    [ { name: 'apple', value: 1.2 },//      { name: 'orange', value: 0.95 } ],//    total: { total: 2.322 }}console.log(select.cart._(exampleState));// { items://    [ { name: 'apple', value: 1.2 },//      { name: 'orange', value: 0.95 } ],//    total: { total: 2.322 }}

About

Abstraction around reactjs's `reselect`to define trees of selectors

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors4

  •  
  •  
  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp