Я не большой пользователь Redux
(, я предпочитаю MobX
), поэтому я мог бы пропустить некоторые тонкие аспекты.Но из того, что я вижу, это довольно просто, и React docs на крючках дает очень хороший пример :
const initialState = {count: 0};
function reducer(state, action) {
switch (action.type) {
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
throw new Error();
}
}
function Counter({initialState}) {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
Count: {state.count}
<button onClick={() => dispatch({type: 'increment'})}>+</button>
<button onClick={() => dispatch({type: 'decrement'})}>-</button>
</>
);
}
Вместо reducer
, вы можете просто использовать один из связанных редукторов изваша существующая база кодов управления состоянием.Просто импортируйте его в файл компонента и передайте его useReducer
в качестве первого аргумента.Состояние, которое вы вернете оттуда, станет новым состоянием для компонента, и оно будет автоматически перерисовываться вместе с ним.Очевидно, вам нужно будет отключить такой компонент от Redux
(, если он подключен ).В противном случае, как было упомянуто в одном из комментариев, вы получите избыточную логику управления состоянием.
Однако на вашем месте я бы не стал переписывать ее для ловушек без крайней необходимости.