0% acharam este documento útil (0 voto)
39 visualizações7 páginas

Entendendo useReducer e GraphQL no React

Enviado por

pessoagomes55
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
39 visualizações7 páginas

Entendendo useReducer e GraphQL no React

Enviado por

pessoagomes55
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd

Programação-----------------------------------------------------

useReducer()

useReducer é um React Hook que permite adicionar um redutor ao seu componente.

Chame useReducero nível superior do seu componente para gerenciar seu estado com um
redutor.

EX:

import { useReducer } from 'react';

function x(state, action) {


// ...
}

function MyComponent() {
const [state, dispatch] = useReducer(x, y);
// ...

x: a função redutora que especifica como o estado é atualizado. Deve ser puro, deve
tomar o estado e a ação como argumentos e deve retornar o próximo estado. Estado e
ação podem ser de qualquer tipo.

y: O valor a partir do qual o estado inicial é calculado. Pode ser um valor de


qualquer tipo. Como o estado inicial é calculado depende do próximo initargumento.

A dispatch function que permite atualizar o estado para um valor diferente e


acionar uma nova renderização.

EX:
const [state, dispatch] = useReducer(reducer, { age: 42 });

function handleClick() {
dispatch({ type: 'incremented_age' });
// ...

O estado atual desta variável de estado, inicialmente definido para o estado


inicial que você forneceu.

A sessionStorage (como o nome sugere) está disponível apenas durante a sessão do


navegador (e é excluída quando a guia ou janela é fechada) - mas sobrevive, no
entanto, a atualização das páginas.
HTTP x HTTPS

a resposta DE uma API a uma requisição volta passando por servidores no meio antes
de chegar até nosso navegador. O problema é que, quando usamos HTTP, qualquer
servidor no meio pode espionar os dados enviados, algo totalmente inseguro!

Para estes outros cenários, existe o HTTPS, que basicamente é o HTTP comum, porém
com uma camada adicional de segurança/criptografia

GraphQL

Apontamos como vantagem do uso do GraphQL o retorno exato dos campos solicitados.
Sem precisar ficar fazendo um monte de requisições na api desnecessariamente e
deixando pesado pro usuario, principalmente se tiver uma internet fraca.
Requisições feitas pelo GraphQL será do tipo POST.

EX:
const OBTER_LIVROS = gql`
query ObterLivros {
livros {
id
slug
titulo
imagemCapa
opcoesCompra {
id
preco
}
}
}
`

Então quando essa parte do projeto for fazer uma requisição vai buscar apenas esses
itens.
Isso torna o GraphQL ideal para aplicações que precisam de uma grande variedade de
dados em diferentes formatos ou que precisam atualizar regularmente suas consultas
de dados.
Também é do GraphQL/Apollo Client

mutation AdicionarItem($item: ItemCarrinhoInput!) {


adicionarItem(item: $item)
}

As mutações são operações que alteram os dados no backend, como criar, atualizar ou
deletar um registro. No Apollo Client, nós usamos a função mutate para disparar uma
mutação e atualizar os dados da aplicação.
Mas e se a mutação que você disparou afetar os dados de outras consultas que já
foram realizadas na aplicação? É aí que entra o refetchQueries, que é uma opção que
nos permite passar para a chamada da função mutate e dizer para o Apollo Client
refazer as consultas especificadas após a mutação ser concluída. Dessa forma, os
dados das outras consultas são atualizados automaticamente com os novos dados do
backend.

No Apollo Client, existem algumas opções podem ser usadas para melhorar a
performance da sua aplicação.

-suspend: A opção suspend permite que a consulta seja suspensa até que uma
determinada condição seja atendida. Isso é útil em casos em que a consulta só
precisa ser executada quando um determinado dado estiver disponível, como por
exemplo, quando o usuário estiver autenticado ou quando um filtro for aplicado.

Exemplo:
const { data, error, loading, refetch } = useQuery(OBTER_POSTS, {
variables: {
usuarioId: usuarioLogadoId,
},
suspend: !usuarioLogadoId
});

-skip: A opção skip permite que a consulta seja pulada completamente se uma
determinada condição for atendida. Isso é útil em casos em que a consulta só deve
ser executada em determinadas condições, como por exemplo, quando o usuário estiver
autenticado ou quando um filtro for aplicado.

Exemplo:
const { data, error, loading, refetch } = useQuery(OBTER_POSTS, {
variables: {
usuarioId: usuarioLogadoId
},
skip: !usuarioLogadoId
});

fetchPolicy: A opção fetchPolicy permite que você escolha como a consulta deve ser
executada e quando os dados devem ser atualizados. As opções disponíveis são cache-
first, cache-and-network, network-only e cache-only.

Exemplo:
const { data, error, loading, refetch } = useQuery(OBTER_POSTS, {
variables: {
usuarioId: usuarioLogadoId
},
fetchPolicy: 'cache-and-network'
});

GraphQL Lazy

O useLazyQuery é um hook que permite que você execute consultas de só quando são
realmente necessárias. Isso é útil em aplicações que possuem muitos dados ou
consultas que só são executadas em determinadas condições, pois evita o
carregamento desnecessário de dados e consultas.

Mas afinal, qual a diferença entre o useLazyQuery e o useQuery? Bem, a principal


diferença é que o useLazyQuery só executa a consulta quando é chamado
explicitamente, enquanto o useQuery executa a consulta assim que é definido.

UseEffect(() => {
fetch('[Link]
.then(...........)
}, [])

O use UseEffect realizar o codigo dentro dele sempre que o componente é


renderizado, no caso vai fazer uma requisição na api, onde a api vai ser do link
dentro do fetch, e então vai fazer o que está dentro do .then

,[] vai fazer que execute o código apenas na primeira vez que o conponente for
renderizado
mas também posso colocar algo nesse array de dependencia e sempre que esse algo
renderizar irá executar o código (Ex: , [busca])
Node

Para executar algo no node faz isso no terminal:


node [Link]

isso vai executar apenas no terminal

Coerção de Tipos em JavaScript

A coerção de tipos em JavaScript refere-se à conversão automática e implícita de um


tipo de dado para outro durante operações.

Conversão de Tipos em JavaScript

A conversão de tipos é a transformação explícita de um tipo de dado em outro.


Explícito, pois é no código que o programador difine essa conversão de tipos.

Symbol

O tipo Symbol é um tipo que representa um identificador único e imutável. Símbolos


são frequentemente utilizados para criar propriedades de objeto que são únicas e
não interferem com outras propriedades existentes.
Essa característica evita conflitos com outras chaves, prevenindo a sobrescrita
acidental de propriedades.
Spread Operator (os ... dentro do array)

Assim, o spread operator pega todos os valores e, literalmente, abre o array e


espalha seu conteúdo. O que ocorre é a criação de um array, onde os valores da
variável notas são espalhados dentro desse array, e em seguida, adicionamos mais um
valor.

const notas = [7,7,8,9];


const novaListaNotas = […notas];

i++
O operador i++ é conhecido como pós-incremento. Ele primeiro retorna o valor atual
de i e depois incrementa i em 1 unidade. Ou seja, o valor atual de i é usado na
expressão em que i++ está presente, e após isso, i é aumentado em 1.

Exemplo:
let i = 5;
[Link](i++); // Saída: 5 (retorna o valor atual de i)
[Link](i); // Saída: 6 (i foi incrementado após a execução)

++i
O operador ++i é conhecido como pré-incremento. Ele primeiro incrementa i em 1
unidade e depois retorna o novo valor de i. Ou seja, o valor de i é incrementado
imediatamente, e então o valor atualizado é usado na expressão em que ++i está
presente.

Exemplo:
let j = 8;
[Link](++j); // Saída: 9 (j foi incrementado antes de ser usado)
[Link](j); // Saída: 9 (j já foi incrementado)
Set

O objeto Set permite que você armazene valores únicos de qualquer tipo, desde
valores primitivos a referências a objetos.

Ou seja, irá pegar de um array ou outro lugar apenas os valores unicos, e se um


repetir não irá aparecer. E retorna um conjunto "array like", que parece um array
mas não tem acesso aos metodos de array

Exemplo:
const nomes = ["Ana", "Clara", "Maria", "Maria", "João", "João", "João"];

const listaNomesAtualizados = new Set(nomes)

[Link](listaNomesAtualizados);
// aparece no console: [ 'Ana', 'Clara', 'Maria', 'João' ]

Você também pode gostar