Wywołanie metody na onclicka

Wywołanie metody na onclicka
S5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 238
0

Jaka jest różnica między wywołaniem metody na onclicka w ten sposób:

Kopiuj
<Button onClick={deleteImage(id)}>Usuń</Button>

a w taki sposób:

Kopiuj
<Button onClick={() => deleteImage(id)}>Usuń</Button>

W tym pierwszym zapisie metoda od razu wykona się przy renderze komponentu?

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 250
2

Pierwsza funkcja powinna zwracać inną funkcję, która przyjmie argumenty eventu. Stosowane czasami podczas generowania handlerów w Reakcie wewnątrz map().

Kopiuj
const deleteImage = (id) => {
    return (e) => {
    //Todo
    } ;
} 

Druga to odwrotna konstrukcja, wykonująca deleteImage po evencie.

S5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 238
0

A czy ta pierwsza funkcja nie wykona się już w momencie renderingu komponentu?

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 250
1

W pierwszym przypadku masz od razu wywołanie funkcji, czy tak, funkcja wykona się w podczas renderowania, ale wynikiem tego wywołania powinna być kolejna funkcja, która będzie podstawiona pod onClick.

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
1

Natomiast to, że "powinno", nie znaczy, że tak będzie.

Równie dobrze taki kod

Kopiuj
<Button onClick={deleteImage(id)}>Usuń</Button>

Może wynikać z czyjegoś błędu. Załóżmy, że funkcja deleteImage naprawdę kasuje element o danym id. Wtedy dane elementy zostaną po prostu skasowane zanim użytkownik kliknie. Bo może ktoś powinien zrobić to:

Kopiuj
<Button onClick={() => deleteImage(id)}>Usuń</Button>

ale z jakichś względów zrobił co innego.

Dlatego ważny jest kontekst (reszta kodu). Bo czasem wydaje nam się, że coś ma sens, a w rzeczywistości nie ma sensu i jest wynikiem błędu (albo odwrotnie - czasem może się wydawać, że programista popełnił błąd, a w rzeczywistości wiedział, co robi).

S5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 238
0

Pierwsza funkcja powinna zwracać inną funkcję, która przyjmie argumenty eventu.

A czemu niby musi zwracać inna funkcję?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.