• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

React - event.persist()

Object Storage Arubacloud
0 głosów
1,593 wizyt
pytanie zadane 19 października 2018 w JavaScript przez Al3x Użytkownik (870 p.)

Witam,

mam problem, gdyż nie wiem jak użyć event.persist(), a jego użycie wynika z faktu błędu:

 Warning: This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property `target` on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist(). See https://fb.me/react-event-pooling for more information.

Kod

<input value={this.state.newTodoData.name} onChange={(event) => this.setState(prevState =>({
                     newTodoData: {
                        ...prevState.newTodoData,
                        name: event.persist()
                     }}))} placeholder="Title" type="text" />
						<textarea value={this.state.newTodoData.description} onChange={(event) => this.setState(prevState =>({
                     newTodoData: {
                        ...prevState.newTodoData,
                        description: event.target.value
                     }}))} placeholder="Description" type="text" />

 

1 odpowiedź

+1 głos
odpowiedź 20 października 2018 przez rafal.budzis Szeryf (85,260 p.)
wybrane 20 października 2018 przez Al3x
 
Najlepsza

Nie potrzebnie sobie komplikujesz. ;) Problem wynika z faktu iż używasz setState jako funkcji. Dlatego też wewnątrz funkcji setState eventu jest już usunięty z pamięci. https://reactjs.org/docs/events.html Tu masz w drugim  akapicie ("Event Pooling") przykład jak odwołać się do czegoś z eventu w innej funkcji. (W przykładzie jest setTimeout) 

 

Możesz też zmienić wywołanie setState na taką postać ;) 

 

<input 
    value={this.state.newTodoData.name} 
    onChange={(event) => this.setState({
        name: event.target.value
    })} 
    placeholder="Title" type="text" 
/>
<textarea 
    value={this.state.newTodoData.description} 
    onChange={(event) => this.setState({
        description: event.target.value
    })} 
    placeholder="Description" 
    type="text"
/>

 

Wspomnę też ze w ramach wydajności warto deklaracje funkcji onChange przenieść do klasy. Obecnie za każdym razem kiedy React renderuje komponent tworzy dwie nowe funkcje w pamięci.

Podobne pytania

0 głosów
2 odpowiedzi 369 wizyt
pytanie zadane 22 maja 2020 w JavaScript przez rob Bywalec (2,440 p.)
0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 17 listopada 2020 w JavaScript przez Bartek12 Mądrala (5,510 p.)
0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 8 czerwca 2020 w JavaScript przez rob Bywalec (2,440 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...