Aktywne Wpisy
Horkheimer +369
Autentycznie jest mi trochę żal Bosaka xD jako jedyny wydawał się w miarę ogarnięty, zawsze przygotowany merytorycznie, dobrze wypadał w mediach, starał się prowadzić poważną kampanię
a obok pijany Memcen nawalający do Petru tekstami z "Chłopaki nie płaczą", już o tej słynnej debacie nie wspomnę. Tik toczki, heheszki, memy
Braun i Korwin ze swoimi szurskimi wypowiedziami o rozstrzeliwaniu ministrów xD
nie dziwię się ludziom, którzy - mimo całej sympatii do Bosaka -
a obok pijany Memcen nawalający do Petru tekstami z "Chłopaki nie płaczą", już o tej słynnej debacie nie wspomnę. Tik toczki, heheszki, memy
Braun i Korwin ze swoimi szurskimi wypowiedziami o rozstrzeliwaniu ministrów xD
nie dziwię się ludziom, którzy - mimo całej sympatii do Bosaka -
Pepega +638
mela na ryj każdemu facecikowi w przedziale 18-40 co zaglosował na lewice, #!$%@? z wami przygłupy
#wybory
#wybory
Bardzo prosty conditionalRendering.
Form > a w środku textArea i button
Nakreślę kod.
` const [openNote, setOpenNote] = useState(false);
// no i rendering na zasadzie toogle // kod to tylko zarys - podstawy podstaw. także bez szczegółów
{openNote && ( ) } ....
{!openNote && ({
setOpenNote ( true )
} } ) } ....
I teraz całe zamieszanie Form Posiada na sobie OutsideClicka - custom hooka który bierze refa czyli naszego forma i sprawdza jeśli jest outside click to robi Callbacka, w tym przypadku po prostu ukrywa Forma.
I o co całe zamieszanie ?
Patrząc na conditional wyżej, button ukrywa się w momencie pokazania textArea - > on go nie toogluje, tylko pokazuje a sam znika.
Sprawdziłem sobie kolejność wywołania funkcji po kliknieciu i wygląda to tak:
1. handleToogle zmiana statu
2. rerenderkomponenu
3.UWAGA ! odpala outsideClicka >> dziwne ?
Co za tym idzie zamiast tooglować / pokazywać mi textArea i ukrywać button zamyka mi całego forma.
Żeby nie było że jestem głupi i nie szukałem o co kaman.
Sprawdziłem e.target =>
event wychodzi z elementu button ( span ), czyli naszego buttona.
Patrząc na atrybuty nodowskie ukrywanie klikniętego buttona powoduje że
ofSetParent : null
a powinien być :
offsetParent:
I o co kaman ? Czy chodzi o kwestie onClick ?
Gdy buttona nie chowam nie ma żadnego problemu. Wygląda tak jakby najpierw mi go chował a później wykrył onClick z outsideClickHooka
#react #javascript #programowanie
wklej kod na codesandbox
https://codesandbox.io/s/nervous-dewdney-de0qy?file=/src/App.js
Problem raczej w tym że btn do pokazywania textArea po kniknięciu nie jest w drzewie elementu REF i traktuje go wtedy jako spełniony warunek w outsideClick, i zamyka mi forma.
Forma zrobiłem jako diva, ale to jeden ciul.
Mógłbym po prostu chować go poprzez display, nie usuwać go z drzewa, ale chciałbym zrozumieć z czym to jest związane. Z charakterystyką wywołania funkcji czy z charakterystyką wywołania event on click.
addEventListener
i momentu w którym event zostanie przechwycony: https://www.quirksmode.org/js/events_order.html#link4Jeśli w Twoim przykładzie, w
useEventListener
ustawisz flagęuseCapture
waddEventListener
natrue
( https://developer.mozilla.org/pl/docs/Web/API/EventTarget/addEventListener ), to osiągniesz zamierzony efekt - callback przekazany doaddEventListener
zostanie wywołany przedonClick
bezpośrednio na przycisku.{
e.stopPropagation()
setOpenNote(true);
}}
>
Ewentualnie mozesz odpalić event w fazie capture kiedy idzie od dokumentu do buttona a nie od buttona do dokumentu
działa, śmiga fajnie - ale muszę ogarnąć. Niby proste elementarne rzeczy ale mam jest podobny problem w trochę bardziej skomplikowanym przykładzie.
events order się kłania - pamiętałem o tym, ale jak pisze się kod to później ciężko samą teorie na
To co chcesz działa dobrze
https://codesandbox.io/s/cocky-noyce-h98ro?file=/src/App.js
"Więc jak klikasz button "show" to znika button i pojawia się textarea ale potem jest wywoływany click handler na dokumencie który ukrywa formularz."
ale dokładnie ukrywa, dlatego że btnShow ten z useState nie jest częścią drzewa form ?
Zauważ że btnShow cały czas jest częścią drzewa form, gdzie warunek w outsideclick nie zostaje spełniony. Rozumiem twoje spostrzeżenie ale chcę być pewien że to
https://codesandbox.io/s/stupefied-sunset-zl4mv
render z buttonem, potem outside handler (juz bez buttonu) i render bez buttonu. Jakby DOM się zmienił wcześniej przed kolejnym renderem ¯\_(ツ)_/¯
Klikniecie w button
Render bez buttona
Event na dokumencie
dlatego nie działa tak jak wydaje się że powinno. Jeśli miałbym obstawiać to problem sprowadza się chyba do tego że onClick to nie jest natywny event (tak jak onclick w js) tylko coś co React nazywa SyntheticEvent. Dlatego jest to obsługiwane w innej kolejności niż natywny event. Ale to taki strzał w ciemno i