2.0.1 • Published 7 months ago

reatom-solid v2.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
7 months ago

reatom-solid

Solid bindings package for Reatom store.

🚫 Deprecated❗️❗️❗️

Please use official adapter

Install

npm i reatom-solid

or

yarn add reatom-solid

reatom-solid depends on and works with @reatom/core and solid-js.

Hooks Api

useAtom

Connects the atom to the store represented in context and returns the state of the atom from the store (or default atom state).

Basic (useAtom)

const [atomValue] = useAtom(atom)

Depended value by selector

const atomValue = useAtom(atom, atomState => atomState[props.id])
const atomValue = createMemo(() => {
    const atom = createAtom({ dataAtom }, ({ get }) => get("dataAtom")[props.id]);
    const [value] = useAtom(atom);
    return value;
});

useAction

Binds action with dispatch to the store provided in the context.

Basic (useAction)

const handleUpdateData = useAction(dataAtom.update)

Prepare payload for dispatch

const handleUpdateData = useAction((value) => dataAtom.update({ id: props.id, value }))

Conditional dispatch

If action creator don't return an action dispatch not calling.

const handleUpdateData = useAction((payload) => {
  if (condition) return dataAtom.update(payload)
})

Usage

Step 0 - OPTIONAL. Create store

// App

import { createStore } from '@reatom/core'
import { reatomContext } from 'reatom-solid'
import { Form } from './components/Form'

import './App.css'

export const App = () => {
  // create statefull context for atoms execution
  const store = createStore()

  return (
    <div className="App">
      <reatomContext.Provider value={store}>
        <Form />
      </reatomContext.Provider>
    </div>
  )
}

Step 1. Bind your atoms.

// components/Form

import { createPrimitiveAtom } from '@reatom/core/primitives'
import { useAtom } from 'reatom-solid'

const nameAtom = createPrimitiveAtom('', {
  onChange: (e) => e.currentTarget.value,
})

export const Form = () => {
  const [name, { onChange }] = useAtom(nameAtom)

  return (
    <form>
      <label htmlFor="name">Enter your name</label>
      <input id="name" value={name} onChange={onChange} />
    </form>
  )
}

Demo

Codesandbox

2.0.1

7 months ago

2.0.0-2

3 years ago

2.0.0-1

3 years ago

2.0.0-0

3 years ago

2.0.0

3 years ago

1.0.0

3 years ago

0.2.0-1

3 years ago

0.2.0-0

3 years ago

0.1.1-1

4 years ago

0.1.1-0

4 years ago

0.1.0

4 years ago

0.0.1

4 years ago