Я использую Zustand для хранения шаблонов, которые представляют собой многомерный массив, и я создал функцию, чтобы получить ценность из хранилища в одиночном хит. state.template))
и т. Д.
export function createSelectorHook<
TStore extends StoreApi,
TKeys extends keyof ExtractState,
>(
store: TStore,
keys: TKeys[],
equalityFn?: (
a: ExtractState[K],
b: ExtractState[K],
) => boolean = Object.is,
): Pick {
const selections = {} as Pick;
keys.forEach(key => {
selections[key] = useStoreWithEqualityFn(store, s => s[key], equalityFn);
});
return selections;
}
< /code>
Это отвечает за значение хранилища возврата в Object < /p>
Я использую это таким образом, например,
const {template, count} = createSelectorHook(storeRefrence, ['template', 'count'])
Я знаю, что нарушаю правила React Hook почему я создаю ниже функцию, если я должен быть предназначен для рендеринга, чтобы направлять данные шаблона из индекса, поэтому я использую пунктирную строку для хранения, в которой они принадлежат
, который я использую, чтобы хранить в значении
, который придерживаюсь значения, которые будут закреплены в значении. строка. < /p>
export function useGetSelectorByPathHook(
store: TStore,
keys: TKeys,
equalityFn: (
a: ExtractState[K],
b: ExtractState[K],
) => boolean = Object.is,
): Record | any {
// return useStore(store, state => getValueAtPath(state, keys));
const render = useStoreWithEqualityFn(store, state => getValueAtPath(state, keys), equalityFn);
return render;
}
function getValueAtPath(obj: any, path: string) {
return path.split('.').reduce((acc, part) => {
if (acc === undefined || acc === null) return undefined;
return acc[part];
}, obj);
}
< /code>
Я использую эту функцию как < /p>
const layout = useGetSelectorByPathHook(storeRef, 'template.0.layout.1')
Я просто хочу подтвердить, что это способ, чтобы сделать это, я делаю, или я нарушаю любое правило Zustand [/b] или реагировать или это создает проблемы в будущем. /> Любое предложение или улучшения помогут мне сделать это лучше. < /p>
Я использую Zustand для хранения шаблонов, которые представляют собой многомерный массив, и я создал функцию, чтобы получить ценность из хранилища в одиночном хит. state.template)) и т. Д.[code]export function createSelectorHook< TStore extends StoreApi, TKeys extends keyof ExtractState, >( store: TStore, keys: TKeys[], equalityFn?: ( a: ExtractState[K], b: ExtractState[K], ) => boolean = Object.is, ): Pick { const selections = {} as Pick; keys.forEach(key => { selections[key] = useStoreWithEqualityFn(store, s => s[key], equalityFn); }); return selections; } < /code> Это отвечает за значение хранилища возврата в Object < /p> Я использую это таким образом, например,
const {template, count} = createSelectorHook(storeRefrence, ['template', 'count'])[/code] [b] Я знаю, что нарушаю правила React Hook [/b] [b] почему я создаю ниже функцию, если я должен быть предназначен для рендеринга, чтобы направлять данные шаблона из индекса, поэтому я использую пунктирную строку для хранения, в которой они принадлежат , который я использую, чтобы хранить в значении , который придерживаюсь значения, которые будут закреплены в значении. строка. < /p> [code]export function useGetSelectorByPathHook( store: TStore, keys: TKeys, equalityFn: ( a: ExtractState[K], b: ExtractState[K], ) => boolean = Object.is, ): Record | any { // return useStore(store, state => getValueAtPath(state, keys)); const render = useStoreWithEqualityFn(store, state => getValueAtPath(state, keys), equalityFn); return render; }
function getValueAtPath(obj: any, path: string) { return path.split('.').reduce((acc, part) => { if (acc === undefined || acc === null) return undefined; return acc[part]; }, obj); } < /code> Я использую эту функцию как < /p> const layout = useGetSelectorByPathHook(storeRef, 'template.0.layout.1')[/code] Я просто хочу подтвердить, что это способ, чтобы сделать это, я делаю, или я нарушаю любое правило Zustand [/b] или [b] реагировать [/b] или это создает проблемы в будущем. /> Любое предложение или улучшения помогут мне сделать это лучше. < /p>