npm i -S realloc
import { createState } from 'realloc'
//create a counter store
const {
getState,
createAction,
subscribe
} = createState({
count:0
})
// create a increment action for the store
const incrementAction = createAction('$.count', (currentCount) => currentCount + 1)
// create a decrement action for the store
const decrementAction = createAction('$.count', (currentCount) => currentCount - 1)
// set a subscriber for the store
const unsubscribe = subscribe((nextState, prevState) => {
console.log("log: ", nextState, prevState)
})
incrementAction() // call the increment action
// state of the store will change,
// => log: {count:1} {count:0}
incrementAction() // call the increment action again
// state of the store will change again
// => log: {count:2} {count:1}
decrementAction() // call the decrement action
// => log: {count:1} {count:2}
// create a action that increment with params
const incrementNumAction = createAction('$.count', (num, currentCount) => currentCount + num)
incrementNumAction(5)
// => log: {count:6} {count:1}
import { createState } from 'realloc'
const initialState = {
"store": {
"book": [{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
}, {
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}, {
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
}, {
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
const {
getState,
createAction,
createGetter,
subscribe
} = createState(initialState)
const unsubscribe = subscribe((nextState, prevState) => {
console.log("log: ", nextState, prevState)
})
const getBookTitlesByPriceGTTen = createGetter('$.store.book[?(@.price > 10)].title')
getBookByPriceGTTen()
// => ["Sword of Honour", "The Lord of the Rings"]
const updateBookCategoryWithPrice = createAction(
'$.store.book[?(@.price > {price})].category',
(payload, currentCategory) => payload.text + currentCategory
)
// call the update action
updateBookCategoryWithPrice({
price:10,
text:'famous '
})
getState().store.book.map(book => book.category)
// => ["reference", "famous fiction", "fiction", "famous fiction"]