
Ao migrar do JavaScript para o TypeScript, apesar de todos os benefícios, podem surgir algumas dúvidas durante o desenvolvimento.
Uma das dúvidas que surgiram enquanto eu desenvolvia com essa linguagem, foi referente à tipagem nos hooks. Felizmente, com pouca pesquisa eu pude encontrar [esse artigo] incrível do Ibrahima Ndaw, e compartilhar com vocês através desse post.
O useState permite que você gerencie o estado em sua aplicação React. É o equivalente ao this.state em um componente de classe.
import * as React from "react";
export const App: React.FC = () => {
const [counter, setCounter] = React.useState<number>(0)
return (
<div className="App">
<h1>Result: { counter }</h1>
<button onClick={() => setCounter(counter + 1)}>+</button>
<button onClick={() => setCounter(counter - 1)}>-</button>
</div>
);
}Para definir tipos no useState, basta passar o tipo do estado no <>. Você também pode usar <número | null> caso não tenha um estado inicial.
O useRef retorna um objeto ref que nos permite acessar elementos do DOM.
import * as React from "react";
export const App: React.FC = () => {
const myRef = React.useRef<HTMLElement | null>(null)
return (
<main className="App" ref={myRef}>
<h1>My title</h1>
</main>
);
}O useContext permite acessar e consumir um determinado Contexto em um aplicativo React.
import * as React from "react";
interface IArticle {
id: number
title: string
}
const ArticleContext = React.createContext<IArticle[] | []>([]);
const ArticleProvider: React.FC<React.ReactNode> = ({ children }) => {
const [articles, setArticles] = React.useState<IArticle[] | []>([
{ id: 1, title: "post 1" },
{ id: 2, title: "post 2" }
]);
return (
<ArticleContext.Provider value={{ articles }}>
{children}
</ArticleContext.Provider>
);
}
const ShowArticles: React.FC = () => {
const { articles } = React.useContext<IArticle[]>(ArticleContext);
return (
<div>
{articles.map((article: IArticle) => (
<p key={article.id}>{article.title}</p>
))}
</div>
);
};
export const App: React.FC = () => {
return (
<ArticleProvider>
<h1>My title</h1>
<ShowArticles />
</ArticleProvider>
);
}Aqui, começamos criando a interface IArticle, que é o tipo de nosso contexto.
Em seguida, usamos essa inteface no createContext() para criar um novo contexto e, em seguida, o inicializamos com um array vazio.
Com isso definido, podemos manipular o estado do contexto e definir o tipo em useContext para esperar o array IArticle como valor.
O useMemo permite memorizar a saída de uma determinada função. Ele retorna o valor 'memoizado'.
const memoizedValue = React.useMemo<string>(() => {
computeExpensiveValue(a, b)
}, [a, b])No exemplo acima, esperamos uma string como valor retornado.
O useCallback permite que você 'memoize' uma função para evitar re-renderizações desnecessárias. Ele retorna uma callback 'memoizada'.
type CallbackType = (...args: string[]) => void
const memoizedCallback = React.useCallback<CallbackType>(() => {
doSomething(a, b);
}, [a, b]);No exemplo acima, o useCallback recebe uma string como parâmetro e retorna um valor do tipo void.
Por hora é só pessoal! Eu espero que com o post de hoje possa ter contribuído com boas práticas no TypeScript.
Fique de olho também nos próximos posts sobre o TypeScript, e se surgirem dúvidas ou sugestões, não deixem de mandar aí nos comentários!