"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > USANDO FECHAMENTOS JAVASCRIPT NO REACT

USANDO FECHAMENTOS JAVASCRIPT NO REACT

Publicado em 2024-08-05
Navegar:253

USING JAVASCRIPT CLOSURES IN REACT

Um Closure é um recurso Javascript onde uma função, incluída dentro de outra função (função externa), é retornada e invocada fora da função externa.

Um fechamento é formado quando a função interna mantém acesso à variável fora de seu escopo, também conhecido como escopo lexical; acesso a variáveis ​​​​e argumentos da função externa mesmo após a execução da função externa.

Vamos criar uma função de fechamento de calculadora de impostos para calcular impostos para bebidas alcoólicas e não alcoólicas com base em suas alíquotas.

const taxCalculator = (vat ) => {
  return function taxableAmount (amount) {
    const tax = amount * vat / 100;
    return tax
  }
}

//alcoholic drinks have their on VAT, lets say 16%
const alcoholTax = taxCalculator(16)
const alcoholA = alcoholTax(1200) // an Alcohol that costs 1200
const alcoholB=alcoholTax(800) // an Alcohol that costs 800

//non-alcoholic have their own VAT, let say 12%

const nonAlcoholTax = taxCalculator(12);
const water = nonAlcoholTax(500)
const Juice=nonAlcoholTax(300)

Como você pode ver, cada bebida sempre se lembrará de sua alíquota de imposto com base no fato de ser uma bebida alcoólica ou não alcoólica, ou seja, a função retornada é invocada fora de taxCalculator e é capaz de recuperar o parâmetro value vat mesmo que o principal a função taxCalculator foi executada.

No react js, biblioteca JavaScript UI, os manipuladores de eventos são declarados embutidos no JSX como tal.

 

Se o manipulador de eventos tiver um argumento, ele será invocado dentro de uma função como tal.

function ActionButtons(){
const actions = ["Create", "Edit", "Delete"]
const handleAction = (action) => {
    switch (action) {
      case actions[0]:
        //do something
        break;
      case actions[1]:
        //do something
        break;
      case actions[2]:
        //do something
        break;

      default:
        // do nothing
        break;
    }
  }
return (
{ actions.map(action => )}
) }

Observe que handleAction é encapsulado por uma função de seta ao atribuí-lo ao manipulador de eventos onclick.

Com o encerramento, podemos simplesmente chamar handleAction com um argumento de ação e retornar uma função interna que captura o argumento de ação e executa o restante das ações assim.

function ActionButtons() {
  const actions = ["Create", "Edit", "Delete"];
  const handleAction = (action) => {
    return function () {
      console.log(` ${action} Action button clicked`);
      switch (action) {
        case actions[0]:
          //do something
          break;
        case actions[1]:
          //do something
          break;
        case actions[2]:
          //do something
          break;

        default:
          // do nothing
          break;
      }
    };
  };
  return (
    
{actions.map((action) => ( ))}
); }

Observou como invocamos handleAction diretamente no evento OnClick? observe também que refatoramos a função handleAction para que ela retorne uma função executando as ações necessárias com uma opção ?

O handleAction é invocado quando o componente é montado, um fechamento ocorre quando a função retornada por handleAction agarra e mantém o valor do argumento em handleAction mesmo que (handleAction) tenha sido executado durante a primeira renderização.
É uma maneira legal de lidar com eventos em Javascript.o que você acha?

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/kipyegonline/using-javascript-closures-in-react-3h9m?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3