import "./styles.css";
// задача: написать кастомный хук useDirtyState
// вначале у которого возвращается isDirty = false
// а если хоть раз применен setState то isDirty = true
// + повесить setState на обработчик клика у increment
const useDirtyState = (initialValue = 0) => {
return [];
};
export default function App() {
const [state, setState, isDirty] = useDirtyState(0);
return (
<div className="App">
<div>State: {state}</div>
<div>Is state dirty: {isDirty ? "dirty" : "not dirty"}</div>
<button>Increment</button>
</div>
);
}**Ответ
import { useState, useRef } from "react";
const useDirtyState = (initialValue = 0) => {
const [state, setState] = useState(initialValue);
const isDirtyRef = useRef(false); // Используем useRef для хранения значения isDirty
const setDirtyState = (value) => {
setState(value);
isDirtyRef.current = true; // Устанавливаем isDirty в true при применении setState
};
return [state, setDirtyState, isDirtyRef.current]; // Возвращаем состояние, функцию для установки значения и текущее значение isDirty
};
export default function App() {
const [state, setState, isDirty] = useDirtyState(0);
const handleIncrement = () => {
setState((prevState) => prevState + 1);
};
return (
<div className="App">
<div>State: {state}</div>
<div>Is state dirty: {isDirty ? "dirty" : "not dirty"}</div>
<button onClick={handleIncrement}>Increment</button>
</div>
);
}