Introdução
Neste laboratório, aprenderemos como usar o hook useDelayedState em React para atrasar a criação de um valor com estado até que uma determinada condição seja atendida. Este hook é útil quando precisamos esperar que dados ou props carreguem antes de criar um valor com estado, e pode ajudar a melhorar o desempenho da nossa aplicação. Através de exemplos práticos, veremos como este hook pode ser implementado e como pode ser usado para atualizar valores com estado em nossos componentes React.
React useDelayedState Hook
index.htmlescript.jsjá foram fornecidos na VM. Em geral, você só precisa adicionar código ascript.jsestyle.css.
Para atrasar a criação de um valor com estado até que uma condição seja atendida, siga estes passos:
- Use o hook
useState()para criar um valor com estado contendo ostatereal e um booleano,loaded. - Use o hook
useEffect()para atualizar o valor com estado se aconditionouloadedmudar. - Crie uma função,
updateState, que só atualiza o valorstateseloadedfor verdadeiro (truthy).
const useDelayedState = (initialState, condition) => {
const [{ state, loaded }, setState] = React.useState({
state: null,
loaded: false
});
React.useEffect(() => {
if (!loaded && condition) setState({ state: initialState, loaded: true });
}, [condition, loaded]);
const updateState = (newState) => {
if (!loaded) return;
setState({ state: newState, loaded });
};
return [state, updateState];
};
Aqui está um exemplo de como usar o hook useDelayedState:
const App = () => {
const [branches, setBranches] = React.useState([]);
const [selectedBranch, setSelectedBranch] = useDelayedState(
branches[0],
branches.length
);
React.useEffect(() => {
const handle = setTimeout(() => {
setBranches(["master", "staging", "test", "dev"]);
}, 2000);
return () => {
handle && clearTimeout(handle);
};
}, []);
return (
<div>
<p>Selected branch: {selectedBranch}</p>
<select => setSelectedBranch(e.target.value)}>
{branches.map((branch) => (
<option key={branch} value={branch}>
{branch}
</option>
))}
</select>
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(<App />);
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 useDelayedState Hook. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.