developit / developit/unistore

useStore Hooks?

Open
#136 19 comments 3 reactions 0 assignees View on GitHub
discussion enhancement help wanted
Dominant language
JavaScript
Stars
2.8k
Forks
134
PR merge metrics
No merged PRs in 30d

Description

```js
/**
* Available methods
*
* value
* isValue
* setValue({ item: value })
* withValue({ item: value })
*
* @param {*} key
*/
export function useStore(key) {
let camelKey = _.camelCase(key)
let setKey = _.camelCase(`set_${key}`)
let isKey = _.camelCase(`is_${key}`)
let withKey = _.camelCase(`with_${key}`)

let selected = store.getState()[camelKey]

function setter(value) {
if (typeof value === 'function') {
const newValue = value(selected)

return store.setState({
[camelKey]: { ...selected, ...newValue }
})
}

return store.setState({
[camelKey]: { ...selected, ...value }
})
}

let getter = selected

return {
[camelKey]: getter,
[isKey]: getter,
[setKey]: setter,
[withKey]: setter
}
}
```

# Used

```js
import { useStore } from 'unistore'

export function disconnected() {
log('Ably Events | event: disconnected')

const { setAblySocket } = useStore('ablySocket')
setAblySocket({ status: 'disconnected' })

const { emitter } = useStore('emitter')
emitter.emit('ably', { payload: 'disconnected' })
}
```

@developit what do you think about this?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.