-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conexão com a API #2
Comments
Requisições HTTPNo modo de desenvolvedor, suas requisições podem aparecer no devTools como sendo realizadas de modo duplicado. Isso acontece por conta do Anatomia de uma requisição fetch fetch('url da requisição').then(
resposta => ... tratamento
) O que não fazer em uma requisição (mas funciona):
fetch('http://localhost:3333/transactions').then(
response => response.json().then(data => console.log(data))
)
fetch('http://localhost:3333/transactions')
.then(response => response.json())
.then(data => console.log(data)) O que fazer em uma requisição:
const [transactions, setTransactions] = useState<Transaction[]>([]);\
async function loadTransactions() {
const response = await fetch('http://localhost:3333/transactions')
const data = await response.json()
setTransactions(data);
}
useEffect(() => {
loadTransactions()
}, []) |
Calculando resumo de transaçõesAnatomia da função reduce: aprenda agora e ascenda socialmente.// final => nova estrutura de dados (em seu estado inicial)
// inicial => nova estrutura de dados (em seu estado atual/final)
// ambos final e inicial também são conhecidos como acc (accumulator / acumulador)
const summary = transactions.reduce(
(final, objeto) => {
// ... o que será feito
return final;
},
// inicial
) Função reduce sendo aplicada para calcular o total de entradas, saídas e saldo de uma lista de transações: const summary = transactions.reduce(
(final, transaction) => {
if (transaction.type === 'income') {
final.income += transaction.price;
final.total += transaction.price;
} else {
final.outcome += transaction.price;
final.total -= transaction.price;
}
return final;
},
{
income: 0,
outcome: 0,
total: 0
}
) |
Controlled components (dnovo)Toda vez que usamos elementos não nativos do html (como o radiogroup do radix no form) para coletar dados do usuário em um form, é ideal que façamos como controled. Se vc der um const newTransactionSchema = z.object({
description: z.string(),
price: z.number(),
category: z.string(),
type: z.enum(['income', 'outcome']),
});
export function NewTransactionModal() {
...
const {
control,
...
} = useForm<NewTransactionFormInputs>({
resolver: zodResolver(newTransactionSchema),
defaultValues: {
type: 'income'
}
});
return (
....
<Controller
control={control}
name="type"
render={({ field }) => {
return (
<TransactionType
onValueChange={field.onChange}
value={field.value}
>
<TransactionTypeButton variant="income" value="income">
<ArrowCircleUp size={24} />
Entrada
</TransactionTypeButton>
<TransactionTypeButton variant="outcome" value="outcome">
<ArrowCircleDown size={24} />
Saída
</TransactionTypeButton>
</TransactionType>
)
}}
/>
...
) |
Buscando transaçõesPara add paramêtros em uma url na Fetch API, precisamos primeiro criar um objeto URL, e depois utilizar o async function fetchTransactions(query?: string) {
const url = new URL('http://localhost:3333/transactions');
if (query) {
url.searchParams.append('q', query);
}
const response = await fetch(url);
const data = await response.json()
setTransactions(data);
} |
Criando nova transação (desacoplamento)Duplicar interfaces em locais diferentes as vezes se faz necessário, quando queremos fazer um descoplamento por exemplo (impedir a dependencia entre componentes, para manter a integridade do sistema em caso de trocas ou substituições) Commi Conexão com a API - Criando nova transação Nesse commit, a interface Assim como a chamada da api Se um dia eu decidir trocar o modal ou a biblioteca de form, isso "não quebra" a minha aplicação. |
JSON Server
JSON Server é biblioteca excelente para simular uma API dentro dos seus projetos frontend.
npm i json-server -D
npx json-server server.json -p 3333 -w
The text was updated successfully, but these errors were encountered: