1.4.0 • Published 1 year ago

east-store v1.4.0

Weekly downloads
8
License
MIT
Repository
github
Last release
1 year ago

east-store

east-store is a state manager with easiest api that based hooks and immer.

npm MIT License

install

npm install east-store

features

  • easy usage, just one api createStore
  • immutale data based immer
  • friendly typescript support, no need more type declarations
  • use react-hooks, why not?

usage

import { createStore } from 'east-store'

const AtomicStore = createStore(0, {
    increase: () => count => count + 1,
    decrease: n => count => count - n
})

const Counter: React.FC = () => {
    const [count, action] = AtomicStore.useStore()
    const handleDecrease = () => {
        action.decrease(3)
    }
    return (
        <div>
            <span>{count}</span>
            <button id="increase-btn" onClick={action.increase}>
                increase
            </button>
            <button id="decrease-btn" onClick={handleDecrease}>
                decrease
            </button>
        </div>
    )
}

Of course, you can use object as initial state

const amy = {
    name: 'Amy',
    total: 130,
    score: { math: 60, english: 70 }
}
const buildStudentStore = (student: typeof amy) =>
    createStore(student, {
        modify: (subject: 'math' | 'english', score: number) => student => {
            student.score[subject] = score
            student.total = student.score.math + student.score.english
        }
    })

const amyScore = buildStudentStore(amy)

const [state, actions] = amyScore.useStore()

So, async operation is also supported

async function fetchCount(): number {
    return await fetch('/path')
}

const AtomicStore = createStore(0, {
    increase: () => count => count + 1,
    getRemote: () => async (_) => {
        return await fetchCount()
    }
})

Api

createStore(initial, actions, options)
destype
initialinitial stateprimitive type object Map, Set
actionsactions for state(payload) => (state) => void | state
optionsother optionspersist: boolean or Storage, default false set true if you want this state been persisted and set custom storage implementation with set, get is also valid * persistence means shared
useStore(selector?, compareFn?)
destype
selectorselector function(state) => state.items
compareFncompare function,default shallow(prev, curr) => boolean
1.4.0

1 year ago

1.3.0

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.0

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

1.0.0-beta.3

4 years ago

1.0.0-beta.2

4 years ago

1.0.0-beta

4 years ago