Если состояние useState
или useReducer
изменяется, компонент обновляется, и в самом компоненте предотвратить это невозможно.
Повторная визуализация должна быть предотвращена в дочернем компоненте, который зависит от частичного состояния, например, сделав его чистым:
const NameContainer = () => {
const { state: { nameReducer: { name } }, dispatch } = useContext(Store)
return <Name name={name} dispatch={dispatch}/>;
}
const Name = React.memo(({ name, dispatch }) => {
const handleInput = ({ target: { value } }) => { dispatch(setName(value)) }
return <div>
<p>{name}</p>
<input value={name} onChange={handleInput} />
</div>
});
NameContainer
можно переписать в HOC и использовать для тех же целей, что и Redux connect
, для извлечения необходимых свойств из хранилища и сопоставления их с реквизитами подключенных компонентов.