и т. Д.
Код: Выделить всё
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>
Подробнее здесь: https://stackoverflow.com/questions/796 ... k-in-react