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 .