Состояние пользовательского интерфейса моего приложения стало несколько сложным со многими useStates, поэтому я создал хук useStateMate (извините за глупое имя), как показано ниже.Есть какие-нибудь ошибки с таким подходом?
import { useState } from 'react';
const stateUpdater = (state, updater) => (property, value) => updater({ ...state, [property]: value })
export default function useStateMate(initialState) {
const [state, updater] = useState(initialState);
const setState = stateUpdater(state, updater);
return [state, setState]
}
Использование: (Состояние пользовательского интерфейса управляется с помощью useStateMate, хранилище данных - нет)
import React from 'react'
import useStateMate from './hooks/useStateMate'
import { useStore } from 'outstated'
import dataStore from './stores/mock-data-store'
const initialState = {
selectedMarkerId: null,
selectedDrivers: [],
mapEditMode: { on: true, id: null, tool: null },
quickChange: null,
filter: '',
groupBy: 'PostalCode,City',
paths: new Map(),
working: false
}
function App(props) {
const [store, dispatch] = useStore(dataStore);
const [state, setState] = useStateMate(initialState);
const { selectedMarkerId, selectedDrivers, mapEditMode, quickChange, filter, groupBy, paths, working } = state;
...
Другой подход, который я выбрал, - использовать Reducer, но не сделалнапример, нужно обновить состояние, сравнить:
dispatch({type: ..., value: ...})
с
setState('property', value)