Introdução
Neste laboratório, aprenderemos como usar o hook useEffectOnce em React para executar uma função de callback no máximo uma vez quando uma determinada condição se torna verdadeira. Isso pode ser útil em situações onde queremos executar uma ação específica apenas uma vez, como quando um componente monta ou quando um botão é clicado. Ao final deste laboratório, você terá uma melhor compreensão de como implementar este hook em suas aplicações React.
React useEffectOnce Hook
index.htmlescript.jsjá foram fornecidos na VM. Em geral, você só precisa adicionar código ascript.jsestyle.css.
O código abaixo implementa uma função useEffectOnce(callback, when) que executa um callback apenas uma vez quando uma condição when se torna verdadeira.
Para implementar esta função:
- Crie uma variável
hasRunOnceusando o hookuseRef()para rastrear o status de execução do efeito. - Use o hook
useEffect()que é executado apenas quando a condiçãowhenmuda. - Dentro do hook
useEffect(), verifique sewhenétruee se o efeito não foi executado antes. Se ambos foremtrue, executecallbacke definahasRunOncecomotrue.
const useEffectOnce = (callback, when) => {
const hasRunOnce = React.useRef(false);
React.useEffect(() => {
if (when && !hasRunOnce.current) {
callback();
hasRunOnce.current = true;
}
}, [when]);
};
Aqui está um exemplo de uso de useEffectOnce():
const App = () => {
const [clicked, setClicked] = React.useState(false);
useEffectOnce(() => {
console.log("mounted");
}, clicked);
return <button => setClicked(true)}>Click me</button>;
};
ReactDOM.createRoot(document.getElementById("root")).render(<App />);
No exemplo, useEffectOnce() é usado para registrar "mounted" no console quando o botão é clicado pela primeira vez. O hook useEffectOnce() recebe dois argumentos: o callback a ser executado e a condição when a ser verificada. A condição when é definida para o estado clicked, então o callback é executado apenas quando clicked é true pela primeira vez.
Por favor, clique em 'Go Live' no canto inferior direito para executar o serviço web na porta 8080. Em seguida, você pode atualizar a aba Web 8080 para visualizar a página web.
Resumo
Parabéns! Você concluiu o laboratório React useEffectOnce Hook. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.