React - jak wyświetlać aktualny czas z odświeżaniem
W tym artykule chcielibyśmy pokazać, jak wyświetlić aktualny czas, który jest odświeżany po ustalonym czasie.
W poniższym przykładzie używamy interwału z hookiem React.useEffect
, aby zbudować prosty licznik czasu.
Nie chcemy niepotrzebnych wywołań funkcji useEffect
, więc użyjemy referencji do funkcji (utworzonej za pomocą React.useRef
).
Kiedy setInterval
wykona jakieś operacje, za każdym razem wywoła funkcję przypisaną do referencji, aktualizując wartość stanu time
.
Funkcja przypisana do reference
jest aktualizowana w każdym cyklu renderowania.
Cały mechanizm zostanie zatrzymany, gdy komponent zostanie zniszczony (wraz z funkcją clearInterval
).
Uwaga:
Aby dowiedzieć się więcej o funkcji
useCurrentCallback
, przejdź do następnej sekcji artykułu.
Uruchamialny przykład:
// ONLINE-RUNNER:browser;
// Note: Uncomment import lines while working with JSX Compiler.
// import React from 'react';
// import ReactDOM from 'react-dom';
const useCurrentCallback = (callback) => {
const reference = React.useRef();
reference.current = callback;
return (...args) => {
return reference.current?.(...args);
};
};
const App = () => {
const [time, setTime] = React.useState(0);
const currentCallback = useCurrentCallback(() => {
const date = new Date();
setTime(date.toISOString());
});
React.useEffect(() => {
const handle = setInterval(currentCallback, 100);
return () => clearInterval(handle);
}, []);
return (
<div>{time}</div>
);
};
const root = document.querySelector('#root');
ReactDOM.render(<App />, root);
useCurrentCallback
Funkcja useCurrentCallback
wykorzystuje hooka React.useRef
, aby zainicjować reference.current
z funkcją callback
, która aktualizowanie naszą wartość time
.
useCurrentCallback
zwraca funkcję z nieokreśloną liczbą argumentów (...args
).
Uwaga:
Więcej o formatowaniu daty i godziny przeczytasz tutaj .