Storeon Solid.js
Solid.js a declarative, efficient, and flexible JavaScript library for building user interfaces. @storeon/solidjs
package helps to connect store with Solid.js to provide a better performance and developer experience while remaining so tiny.
- Size. 200 bytes (+ Storeon itself) instead of ~3kB of Redux (minified and gzipped).
- Ecosystem. Many additional tools can be combined with a store.
- Speed. It tracks what parts of state were changed and re-renders only components based on the changes.
Install
npm install -S @storeon/solidjs
or
yarn add @storeon/solidjs
How to use
Create store using storeon
module:
store.js
import { createStoreon } from 'storeon'
let counter = store => {
store.on('@init', () => ({ count: 0 }))
store.on('inc', ({ count }) => ({ count: count + 1 }))
}
export const store = createStoreon([counter])
main.js
Provide store using StoreonProvider
from @storeon/solidjs
:
import { render } from 'solid-js/dom'
import { StoreonProvider } from '@storeon/solidjs'
import { store } from './store'
render(
<StoreonProvider store={store}>
<App />
</StoreonProvider>,
document.body
)
Import useStoreon
decorator from @storeon/solidjs
:
Counter.jsx
import { useStoreon } from '@storeon/solidjs'
export default function Counter() {
const [state, dispatch] = useStoreon()
return (
<div>
{state.count}
<button onClick={() => dispatch('inc')}>inc</button>
</div>
)
}
Using with TypeScript
Counter.tsx
import { useStoreon } from '@storeon/solidjs'
import { State, Events } from './store'
export default function Counter() {
const [state, dispatch] = useStoreon<State, Events>()
return (
<div>
{state.count}
<button onClick={() => dispatch('inc')}>inc</button>
</div>
)
}