useEffect() with DOM events | React hooks 2021 | React JS

Поделиться
HTML-код
  • Опубликовано: 4 ноя 2024

Комментарии • 89

  • @TriNguyen-og1ws
    @TriNguyen-og1ws 3 года назад +16

    một người thầy dạy có tâm và có tầm, thế hệ của tụi em rất ngưỡng mộ anh, chúc anh và gia đình có nhiều sức khoẻ và kênh ngày càng thành công hơn nữa!!! 😊😊

  • @dinhanhtuan22
    @dinhanhtuan22 2 года назад +11

    1. Lắng nghe DOM event từ react:
    - Sử dụng js thuần để listen DOM event (window.addEventListener('eventName', callback)
    - Khi eventlistener được kích hoạt, nó được lắng nghe từ đối tượng window nên chỉ khi nào close tab, hoặc browser thì mới kết thúc. Component unmount thì evenListener vẫn hoạt động. Khi mount lại thì sinh ra 1 eventlistener mới
    => dẫn đến tình trạng memory leak, khi component được mount lại thì eventlistener cũ vẫn đang lắng nghe từ component cũ
    => sử dụng cleanup funtion, dùng để sử lý khi component bị unmount (áp dụng cho cả 3 trường hợp của useEffect)
    => return ra 1 function trong useEffect

  • @tripham8864
    @tripham8864 3 года назад +4

    Học qua khái niệm này rồi em công nhận a dạy kĩ thật xem lại quả ko phí t/g :D

  • @buivannhat7898
    @buivannhat7898 3 года назад +1

    ngồi hóng miết nới thấy anh ra video , huy vọng mai anh ra thêm video cho tụi em ạ , thanks anh nhiều

  • @nvtentertainment4098
    @nvtentertainment4098 10 месяцев назад

    Em học Spring boot backend xong qua học react bên fe thấy khá là thú vị về cách code

  • @khanhnguyenxuan3827
    @khanhnguyenxuan3827 3 года назад +1

    Chờ mãi cũng có video tiếp theo rồi :D

  • @vangianginh4224
    @vangianginh4224 3 года назад +1

    anh vừa dạy vưa thực hành tâm huyết quá

  • @nhamnguyendinh1899
    @nhamnguyendinh1899 2 года назад +4

    anh cho e hỏi 11:50 : tại sao return () => { unmouting ...} lại được gọi lúc component unmount ?
    theo e hiểu ở dạng useEffect(Callback, [ ]) thì Callback phải được thực hiện hết,
    nhưng khi chưa unmount thì return chạy( dòng 65 vẫn chạy )
    E đoán là return của Callback chỉ được thực hiện khi component unmount?

  • @ThanhNguyen-hd2mi
    @ThanhNguyen-hd2mi 3 месяца назад

    Cam on anh rat nhieu ve nhung bai giang hay a

  • @vanoan3083
    @vanoan3083 2 года назад +1

    Đọc document của react mãi chẳng hiểu.. xem video của anh một lần hiểu luôn..
    thask anh ạ...

  • @maicaotri3668
    @maicaotri3668 3 года назад +1

    Em mạnh dạn đoán video sau là gọi API xong trong khi chờ API về thì unmount component.

  • @xuaanlee9977
    @xuaanlee9977 3 года назад +2

    hay qá a.Mong a ra nhiều video bổ ích nữa ạ!

  • @ovanthao6735
    @ovanthao6735 3 года назад +5

    Hay quá thầy ơi, em cảm ơn thầy nhiều

  • @TuTran-th3wd
    @TuTran-th3wd 2 года назад +2

    anh ơi có cái đoạn cuộn xuống chưa > 300 px mà nó vẫn re render là sao ạ.Nếu em state em khởi tạo là true mà em setState là true thì nó có rerender k hả anh

  • @atphamminh8384
    @atphamminh8384 3 года назад +3

    anh Sơn ơi, anh có bài nào dạy tạo virtual scrollbar không anh, nếu có anh cho em link của bài đó đi, còn không có thì mong anh ra seri tạo virtual scrollbar

  • @vangianginh4224
    @vangianginh4224 3 года назад +3

    nếu truyền [] chỉ chạy 1 lần sau mỗi lần render sao cuộn lên cuộn xuống nó vẫn thay đổi được ạ

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +2

      Vì listener đã được add rồi em, khi event được dispatch thì function handler sẽ được gọi. Em nên học chắc JS một chút nha em

  • @tandang7191
    @tandang7191 3 года назад +1

    cb khi removeEventListener thì sẽ đc gọi lại khi remove phải không anh, vậy ở ví dụ này chắc mình đâu cần truyền cb cho removeEventListener đúng không ạ?

  • @ledinhthai69
    @ledinhthai69 2 года назад +1

    Tại sao mình làm giống vậy, nó lại ko đưa ra warning rò rỉ bộ nhớ giống vậy ta??? Chỗ mục console.log của mình vẫn em ru. Why???

    • @lhson1208
      @lhson1208 Год назад +1

      react 18 không đưa ra warning nữa , nhưng thật ra vẫn bị rỏ rỉ , vẫn phải fix . đọc cmt a Son bảo vậy :))

  • @minhphuc6773
    @minhphuc6773 3 года назад +1

    Có ai làm video editor thì hỗ trợ anh Sơn khoảng dựng clip đi. Chứ 1m anh vừa lên content rồi quay dựng nữa không xuể

  • @thuannguyenthanh6046
    @thuannguyenthanh6046 Год назад

    anh cho em hỏi là bản reactjs 18 em cũng làm cái sự kiện window như anh mà không cần remove nó cũng không báo lỗi gì ạ , à do bản 18 update lên không bị hay là do trình duyệt không thông báo

  • @luu-quangnhat5538
    @luu-quangnhat5538 2 года назад +2

    Tại sao ở 7:48 a Sơn đã xoá 2 lần re-render rồi mà lúc này lại còn bắn ra 2 lần re-render nữa trước khi vào set state vậy?

    • @vantai0703
      @vantai0703 7 месяцев назад

      Thật ra nó chỉ có 1 log do function nó rerender thôi, 1 dòng là do thằng strict mode của react nó có sẵn á. Nên nó sẽ hiện 2 dòng log nhe, theo mình hiểu là vậy không biết đúng k :))

  • @nhamnguyendinh1899
    @nhamnguyendinh1899 2 года назад +2

    anh cho e hỏi 07:50 : a đang dùng dạng useEffect(Callback, [ ]), nó chỉ gọi Callback 1 lần khi component mount xong.
    Nhưng khi scroll thì nó lại gọi Callback liên tục ( console.log(' set state ') bắn ra liên tục).?
    E đoán là "scroll " được coi là 1 deps nên khi scroll thay đổi, Callback sẽ được gọi.
    Nếu viết đầy đủ ở đây phải là useEffect(Callback, [ scroll ]).
    mong anh trả lời =))))

    • @NhatNguyen-zg6il
      @NhatNguyen-zg6il 2 года назад +4

      Nhầm rồi ông ơi , nếu ông hiểu ra r thì thôi tui cmt cho mấy ông xem sau nha :D
      nó gọi 1 lần để addEventListener , và để hiểu rõ hơn thì các ông console ở handleScroll , Callback , Cleanup là biết nó sẽ chỉ gọi console ở handleScroll vì eventlistener đã đc add ấy

    • @atthanh882
      @atthanh882 2 года назад

      @@NhatNguyen-zg6il Đúng rồi cái log đấy trong event mà

    • @HieuNguyen-ei8ep
      @HieuNguyen-ei8ep Год назад +1

      Callback nó đâu được gọi đâu bạn, mà là HandleScroll được gọi chứ, bạn thử console log ở ngoài HandleScroll nhưng vẫn trong callback là hiểu

  • @tienvo9790
    @tienvo9790 2 года назад +2

    anh ơi em làm như vầy ko thấy nó báo Memory leak, như vầy ko biết có sao không anh??
    window.onscroll = function() {
    if (document.body.scrollTop > 40 || document.documentElement.scrollTop > 40) {
    setGoTop(true)
    } else {
    setGoTop(false)
    };
    }

    • @free2idol1
      @free2idol1 2 года назад +1

      Cái bạn làm là "attachEvent" cái này có từ thời IE8 nhưng có nhiều nhược điểm- rồi sau này nó có "addEventLisener" được khuyến khích hơn. Với lại React ko báo vậy thôi chứ event listener cũ vẫn còn nằm trong memory đó, ở chrome console chạy "getEventListeners(window)" sẽ thấy.

  • @anhay9141
    @anhay9141 Год назад +1

    Rất thích những bài giảng của thầy. Thầy có dạy react native k ạ

    • @F8VNOfficial
      @F8VNOfficial  Год назад +1

      Cái này tương lai xa xa mới làm tới em ơiii

  • @phungtruongdinhquan7765
    @phungtruongdinhquan7765 3 года назад +1

    5:50 Cho em hỏi tại sao lại có dấu ngoặc tròn bọc thằng button lại v ạ? E cám ơn.

    • @B8Official
      @B8Official 3 года назад +1

      Bọc vào cho code nó dễ đọc hơn thôi bạn chứ bạn không bọc thì giả sử nó nhiều html trông nó khó nhìn

  • @ngthuongnguyen9804
    @ngthuongnguyen9804 2 года назад +1

    A cho e hỏi, vấn đề ẩn hiện trong ReactJS luôn là state kiểu dữ liệu boolean quyết định hả anh. Cảm ơn a!

    • @F8VNOfficial
      @F8VNOfficial  2 года назад

      Ko em, do biểu thức điều kiện quyết định em nhé

    • @ngthuongnguyen9804
      @ngthuongnguyen9804 2 года назад

      @@F8VNOfficial dạ cảm ơn a, nhưng cho e thắc mắc cái nguyên lý nó hoạt động của nó (setShowGoTotop) nó làm sao hiện đc ạ, giả như mình thêm kiểu dữ liệu khác trong state nó có hiện đc ko ạ. E xin lỗi vì làm phiền anh. Hỏi :)

  • @dumahuu137
    @dumahuu137 3 года назад +1

    anh cho em hỏi khi thay đổi key khi render ra thì chuyện gì sẽ sảy ra ạ

  • @vankhiem3614
    @vankhiem3614 3 года назад

    Đợi mãi.thank anh

  • @huyhoangle1612
    @huyhoangle1612 2 года назад +1

    mọi người cho em hỏi với ạ, nay em sử dụng nextJS thì screen hay window API đều bị "is not defined", cả reactJS cx thế ạ, em có mò google thì nhiều trang bảo là nhưng cái API này chỉ dùng đc trên browser chứ ko chạy đc trên nodeJS env, em thấy cx hợp lý nhưng em thấy anh Sơn dùng rất thoải mái mà ko bị lỗi gì, mong mọi người và anh Sơn giải đáp giúp, em cám ơn

    • @F8VNOfficial
      @F8VNOfficial  2 года назад

      A dùng React chạy ở browser em ơi, em dùng next nếu code react đó được render trên server thì không có window đâu em nha

    • @huyhoangle1612
      @huyhoangle1612 2 года назад

      @@F8VNOfficial dạ thưa, em cám ơn anh đã trả lời, em dùng nextJS và render trên browser, mấy hôm nay dùng react thì ổn nhưng sang next dùng window thì vẫn lỗi ạ =))

  • @duytuong9369
    @duytuong9369 7 месяцев назад

    phiên bản mới hình như ko cần remove eventlistener nữa

  • @minh551
    @minh551 2 года назад

    Hình như em thấy react 18 fix cái việc rò rĩ bộ nhớ rồi thì phải,
    nếu như vậy thì có cần phải viết hàm clean không ạ?

    • @F8VNOfficial
      @F8VNOfficial  2 года назад +2

      Cái đó ko tự fix đc đâu em, coder phải tự biết vấn đề mà xử lý em ạ. Chỉ là 18 nó ko warning thôi ý

  • @nhattiennguyen5026
    @nhattiennguyen5026 2 года назад +1

    Cảm ơn anh nhiều!

  • @chaudeveloper6816
    @chaudeveloper6816 Год назад

    anh ơi , hình như là từ phiên bản React 17 trở đi useEffect nó tự huỷ DOM Event khi unmounting, hì phải

    • @F8VNOfficial
      @F8VNOfficial  Год назад

      Hic không phải em ơi. Em thử ôn chắc lại JS em sẽ tự hiểu là làm sao nó tự huỷ được khi em listen event ở đối tượng thuộc phạm vi window như vậy đc em. Nó ko báo warning ra thôi.

    • @chaudeveloper6816
      @chaudeveloper6816 Год назад

      dạ anh, em hiểu rồi ạ, em thử console ra thì khi unmounting nó vẫn còn DOM even đó·@@F8VNOfficial

  • @sonlengoc948
    @sonlengoc948 Год назад

    hình như anh quên làm cái video note lại những điều cần lưu ý cho useEfftect()

  • @vucggaming1583
    @vucggaming1583 3 года назад +1

    CHỜ MÃI ĐẠI CA ƠI HUHUU , SAO NGỈ GẦN 1 TUẦN VẬY XẾP , LÀM EM HÓNG MUỐN GÃY CÁI DÉP LUÔN :((((((((((

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +3

      Tại anh edit cái video review đồ đạc mất 3-4 ngày, xong cũng mệt quá nên mãi mới quay thêm đc 😥

  • @huy19437
    @huy19437 3 года назад +1

    1,7,16,37,79,173,...
    4 số tiếp theo ae

  • @amanda2348-g9j
    @amanda2348-g9j Год назад

    cleanup chạy cả khi re-render chứ nhỉ

  • @coded4331
    @coded4331 3 года назад

    Tuyệt vời!

  • @toanhuynh7078
    @toanhuynh7078 2 года назад +1

    Em vẫn làm như anh nhưng không rõ tại sao nó khộng hiện warning memory leak .

    • @NamNguyenacPhuong
      @NamNguyenacPhuong 2 года назад

      fix được chưa bạn.
      mình cũng bị vấn đề này

    • @toanhuynh7078
      @toanhuynh7078 2 года назад

      @@NamNguyenacPhuong chưa ban

    • @luu-quangnhat5538
      @luu-quangnhat5538 2 года назад +3

      ​@@toanhuynh7078 React 18 bỏ warning đó rồi nhưng thực chất nó vẫn chạy ngầm ở dướ nha. Trong vd này của a Sơn bạn có thể mount/unmount vài lần rồi console chạy "getEventListeners(window)" vào trình duyệt sẽ thấy nó ngầm tạo thêm event ở dưới

  • @kienangtrung8862
    @kienangtrung8862 3 года назад +1

    Hay quá anh ơi ♥

  • @henhhenh2148
    @henhhenh2148 2 года назад

    Quá đẹp trai lun a ơi

  • @chis6421
    @chis6421 3 года назад +2

    Hay quá anh, nhưng anh ra video đều hơn dc k ạ

    • @B8Official
      @B8Official 3 года назад +2

      Ông học cho chắc vào chứ anh Sơn ra nhanh ông cũng phải học lại vài lần mới nhớ được

  • @spidoor
    @spidoor 2 года назад

    anh dùng theme gì vậy ạ

  • @nguyenvanchung3940
    @nguyenvanchung3940 2 года назад

    Tuyệt vời

  • @Pinbao
    @Pinbao 3 года назад

    Hay quá a ơi

  • @TriNguyen-og1ws
    @TriNguyen-og1ws 3 года назад

    hay qua anh oiii

  • @phungtruongdinhquan7765
    @phungtruongdinhquan7765 3 года назад

    Ủa mà hình như bấm Button nó ko chạy lên top nhỉ :v

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +1

      Cái đó tự làm thôi em, học React lại bắt anh nói lại JS à 🤣🤣

  • @nguyenAudio77
    @nguyenAudio77 2 года назад

    Hay qúa!

  • @hoalep9889
    @hoalep9889 3 года назад

    Xịn quá

  • @kaitohasei2497
    @kaitohasei2497 3 года назад +1

    mấy thằng hooks này em học thấy hơi loạn ta :v

  • @NamangMinh1
    @NamangMinh1 3 года назад +1

    hay bài sau anh giảng kĩ hơn nha anh

    • @F8VNOfficial
      @F8VNOfficial  3 года назад

      Kỹ hơn ở điều gì em ơi? Video sau anh nói về trường hợp khác thôi em

    • @NamangMinh1
      @NamangMinh1 3 года назад +1

      em chưa hiểu lắm về useeffect

    • @F8VNOfficial
      @F8VNOfficial  3 года назад

      @@NamangMinh1 em học kỹ lại kiến thức cần có anh nói trong bài 1 đi em

    • @NamangMinh1
      @NamangMinh1 3 года назад +1

      @@F8VNOfficial vâng ạ.thì ra là thế ...

    • @KhangNguyen-kq2iw
      @KhangNguyen-kq2iw 3 года назад +2

      bạn xem k hiểu thì xem kĩ lại từng video nha, anh Sơn dạy tới đâu là chắc kiến thức phần đó ý

  • @vuongqtvn
    @vuongqtvn 3 года назад

    cho anh 1 tym

  • @NguyenDung-oh3kk
    @NguyenDung-oh3kk 3 года назад

    Cmt đầu

  • @B8Official
    @B8Official 3 года назад +2

    cách 2: trong trường hợp ta không muốn dùng đến hàm cleanup
    useEffect(() => {
    window.onscroll = (e) => {
    if (window.scrollY >= 200) {
    setScrollToTop(true);
    } else {
    setScrollToTop(false);
    }
    }
    }, [])

  • @quanle590
    @quanle590 6 месяцев назад

    em làm y như này bên typescript nhưng kh cleanup khi unmount, sau đó mount lại và resize thì nó không báo lỗi như a là sao v ạ

    • @F8VNOfficial
      @F8VNOfficial  6 месяцев назад +1

      Không báo lỗi thì nó tuỳ vào cơ chế của phiên bản React. Những kiến thức cơ bản về Javascript cho ta biết memory leak sẽ xảy ra ở đó em, em console thử trong event handler là biết đó.

    • @quanle590
      @quanle590 6 месяцев назад

      @@F8VNOfficial dạ em cảm ơn a

  • @NguyenDung-oh3kk
    @NguyenDung-oh3kk 3 года назад

    Cmt đầu