import { useStoreMap } from "effector-vue/composition";
Function, which subscribes to store and transforms its value with a given function. Signal will update only when the selector function result will change
Methods
useStoreMap($store, fn)
Formulae
useStoreMap( $store: Store<State>, fn: (state: State) => Result,): ComputedRef<Result>;
Arguments
$store
: SourceStore<State>
fn
((state) => result): Selector function to receive part of source store
Returns
(ComputedRef<Result>
)
useStoreMap(config)
Formulae
useStoreMap({ store: Store<State>, keys?: () => Keys, fn: (state: State, keys: Keys) => Result, defaultValue?: Result,}): ComputedRef<Result>;
Arguments
params
(Object): Configuration objectstore
: Source storekeys
(() => Keys
): Will be passed tofn
selectorfn
((state: State, keys: Keys) => Result
): Selector function to receive part of source storedefaultValue
(Result
): Optional default value iffn
returnedundefined
Returns
(ComputedRef<Result>
)
Examples
This hook is very useful for working with lists, especially with large ones
User.vue
import { createStore } from "effector";import { useUnit, useStoreMap } from "effector-vue/composition";
const $users = createStore([ { id: 1, name: "Yung", }, { id: 2, name: "Lean", }, { id: 3, name: "Kyoto", }, { id: 4, name: "Sesh", },]);
export default { props: { id: Number, }, setup(props) { const user = useStoreMap({ store: $users, keys: () => props.id, fn: (users, userId) => users.find(({ id }) => id === userId), });
return { user }; },};
<div> <strong>[{user.id}]</strong> {user.name}</div>
App.vue
const $ids = createStore(data.map(({ id }) => id));
export default { setup() { const ids = useStore($ids);
return { ids }; },};
<div> <User v-for="id in ids" :key="id" :id="id" /></div>