useLayoutEffect() hook | Phân biệt useEffect và useLayoutEffect | React JS

Ғылым және технология

👉 Xem Lộ Trình Học: fullstack.edu.vn/learning-paths
👉 Đăng Ký Học Offline Tại F8: short.f8team.dev/dang-ky-hoc-...
Video này chúng ta cùng đến với khái niệm về useLayoutEffect() hook | Phân biệt useEffect và useLayoutEffect | React JS
useLayoutEffect hook là một hook hoạt động tương tự như useEffect hook. Điểm khác nhau giữa 2 hooks này là thứ tự thực hiện các công việc mình đã liệt kê dưới đây:
#useEffect
1. Cập nhật lại state
2. Cập nhật DOM (mutated)
3. Render lại UI
4. Gọi cleanup nếu deps thay đổi
5. Gọi useEffect callback
#useLayoutEffect
1. Cập nhật lại state
2. Cập nhật DOM (mutated)
3. Gọi cleanup nếu deps thay đổi (sync)
4. Gọi useLayoutEffect callback (sync)
5. Render lại UI
Source: dev.to/nibble/what-is-uselayo...
#hoclaptrinh #hoclaptrinhmienphi #javascript #reactjs #frontend #backend #devops #f8
-------
☻ Phần mềm sử dụng trong video:
Công cụ dịch Tiếng Anh: bit.ly/2Wsuhet
Công cụ đo đạc giao diện web: s.net.vn/D8kL
Công cụ viết CV xin việc chuyên nghiệp: mycv.vn
--------------
☻ Khóa học lập trình web MIỄN PHÍ:
Kiến thức nhập môn: fullstack.edu.vn/courses/less...
Xây dựng giao diện với HTML, CSS: fullstack.edu.vn/courses/html...
Xây dựng web responsive: fullstack.edu.vn/courses/resp...
Lập trình Javascript cơ bản: fullstack.edu.vn/courses/java...
Lập trình Javascript nâng cao: fullstack.edu.vn/courses/java...
Làm việc với Terminal & Ubuntu: fullstack.edu.vn/courses/wind...
Xây Dựng Website với ReactJS: fullstack.edu.vn/courses/reactjs
Xây dựng web với Node & Express: fullstack.edu.vn/courses/nodejs
HTML, CSS tips: fullstack.edu.vn/courses/html...
Ứng dụng cảnh báo khi sờ lên mặt: fullstack.edu.vn/courses/tool...
Xem thêm tại: fullstack.edu.vn/courses
-------------------------------------
F8 Official
(c) Sơn Đặng
Website: fullstack.edu.vn
Facebook cá nhân: / sondnf8
Nhóm Học Lập Trình Web: / f8official
Email: contact@fullstack.edu.vn
© Bản quyền thuộc về Channel F8 Official ☞ Do not Reup
© Nghiêm cấm sử dụng video nhằm mục đích thương mại dưới mọi hình thức.

Пікірлер: 46

  • @dinhanhtuan22
    @dinhanhtuan22 Жыл бұрын

    A. useEffect 1. Cập nhật lại state 2. Cập nhật lại DOM (mutate) 3. Render lại UI 4. Gọi clear up fuction khi deps thay đổi 5. Gọi useEffect callback B. useLayoutEffect 1. Cập nhật lại state 2. Cập nhật lại DOM (mutate) 3. Gọi clear up function khi deps thay đổi (sync) 4. Gọi useEffect callback (sync) 5. Render lại UI

  • @HaiNguyen-bx4kr
    @HaiNguyen-bx4kr2 жыл бұрын

    Cảm ợn anh, đọc học React trước đó nhưng học lại của anh cảm thấy hiểu được thêm rất nhiều thứ.

  • @phanhaiang7052
    @phanhaiang70522 жыл бұрын

    bài này hay thật sự, đúng cái em bị bấy lâu nay mà không fix được, hay quá anh ơi

  • @ducphan9753
    @ducphan97532 жыл бұрын

    hay quá a ơi, biết thêm dc 1 kiến thức mới

  • @leanhducvt
    @leanhducvt2 жыл бұрын

    hữu ích lắm idol :D

  • @hieu_nguyen_20
    @hieu_nguyen_202 жыл бұрын

    Hay anh ơi !!

  • @NgocNguyen-uo7tc
    @NgocNguyen-uo7tc2 жыл бұрын

    huhu 😭😭😭 giờ mới xem đc video này .. tối qua mất 4 tiếng ko pix đc lỗi hoá ra dùng thg này

  • @lenhac9040
    @lenhac90402 жыл бұрын

    Hay quá

  • @DuyTran-ss4lu
    @DuyTran-ss4lu2 жыл бұрын

    Hay a

  • @ducntdev
    @ducntdev2 жыл бұрын

    hên, hnay ms vào thế, mai có solution để fix r :v

  • @phamquangthieu00
    @phamquangthieu002 жыл бұрын

    Anh Sơn ơi, khi nào có khóa NodeJS ạ

  • @huybuiquoc2001
    @huybuiquoc20012 жыл бұрын

    em cũng bị khi fillter sản phẩm hyhy

  • @fukemy123
    @fukemy123 Жыл бұрын

    mình chỉ dùng uselayoutEffect để chạy LayoutAnimation trong đó ( react native)

  • @thanhduynguyen6253
    @thanhduynguyen62537 ай бұрын

    Máy ai mà không thấy số 4 thì thêm dòng log(count) trước setCount(0) là có nhé, máy mình do nhanh quá nên không nhìn thấy nên ai bị vậy thì làm như mình là thấy ngay khi render 4 và log ra 4 rồi thì mới setCount về 0

  • Жыл бұрын

    react": "^18.2.0", ở 3p50s không bị trường hợp nhấp nháy từ 4 về 0.

  • @ngocngokim

    @ngocngokim

    11 ай бұрын

    vẫn có mà b

  • @NguyenDung-oh3kk
    @NguyenDung-oh3kk2 жыл бұрын

    Cmt đầu

  • @thang8617
    @thang86174 ай бұрын

    Cá nhân mình lại thấy useLayoutEffect hữu ích hơn :)

  • @musicrain3080
    @musicrain30802 жыл бұрын

    Nếu trong func handleRun viết lại setCount theo kiểu: setCount(prevCount => prevCount + 1) thì cũng giải quyết được vấn đề này mà không cần sử dụng useLayoutEffect. Tại sao lại như vậy ạ? Anh có thể giải thích được đoạn này không ạ?

  • @thinho2685

    @thinho2685

    Жыл бұрын

    thì ad cũng có nói là ko cần thiết phải sử dụng useLayoutEffect. Khi nào cần thiết bắt buộc mới phải dùng. Còn admin chỉ demo để mình hiểu cách nó chạy như nào thôi.

  • @thangnguyenhuu5076

    @thangnguyenhuu5076

    Жыл бұрын

    mình đã thử và không hề giải quyết được vấn đề, bạn nên xem lại. Vì setCount(prevCount => prevCount + 1) và setCount(count + 1) kết quả đều là setCount(4) và render lại UI.

  • @modivation6551

    @modivation6551

    10 ай бұрын

    @@thangnguyenhuu5076 trong hàm callback bạn phải kiểm tra xem nó có >3 không, nếu có thì set nó thành 0 luôn. thì count sẽ mãi mãi không >3 được.

  • @lehoanglong9794
    @lehoanglong97942 жыл бұрын

    Mọi người cho mình hỏi đoạn code trên, tại sao useEffect với dependency là count, trong callback của useEffect lại setCount mà ko bị infinity loop nhỉ ? Ai giải thích giúp mình với.

  • @kysomaio7207

    @kysomaio7207

    2 жыл бұрын

    sao mà infinity loop đc bạn . VD count updated là 2 , vậy 2 thì sao lớn hơn 3 để thoã điều kiện mà setCount đc thực thi

  • @sangduy9282

    @sangduy9282

    Жыл бұрын

    Callback của useEffect setCount về 0 thì count lúc này luôn = 0 nên [deps] ko thay đổi nên useEffect ko bị gọi lại => k bị infinity. Infinity khi callback của useEffect có đối số là 1 callback làm thay đổi count. Ví dụ setCount(count=>count+1) chẳng hạn

  • @TrucNguyen-ut7pc
    @TrucNguyen-ut7pc2 жыл бұрын

    Anh làm thế nào để biết cái luồng bên dưới chạy sao vậy a?

  • @F8VNOfficial

    @F8VNOfficial

    2 жыл бұрын

    Đọc trên reactjs.org nha em

  • @longho542
    @longho5422 жыл бұрын

    Sao mình ko check điều kiện ở handleRun để setCount về 0 vậy anh, thực tế có làm vậy ko anh?

  • @minhvunguyen4495

    @minhvunguyen4495

    2 жыл бұрын

    bạn xem ko kỹ rồi, ổng cố tình làm vậy để cho lúc render bị nháy => xem sự khác nhau giữa useEffect và useLayoutEffect mà

  • @F8VNOfficial

    @F8VNOfficial

    2 жыл бұрын

    À anh làm ví dụ để nêu ra vấn đề thôi. Trong thực tế cũng ít gặp, useEffect được dùng trong hầu hết mọi trường hợp xử lý side effect. Sau gặp tình huống chớp nháy như ví dụ thì dùng useLayoutEffect để giải quyết

  • @longho542

    @longho542

    2 жыл бұрын

    @@F8VNOfficial à dạ, ý em là em hiểu anh làm ví dụ để hiểu đc luồng chạy của 2 hook, nhưng mà em thấy nếu check điều kiện ở useState trước khi setCount thì cũng ko bị trường hợp chớp nháy mà cũng ko cần đến 2 hook kia á anh. Thông thường em cũng ít khi dùng useEffect cho mấy trường hợp này, thường dùng để gọi api thôi à anh, nên em mới thấy cách xử lý này mới á

  • @leehoan4760
    @leehoan4760 Жыл бұрын

    liệu useLayoutEffect có thay thế luôn thằng useEffect k nhỉ thấy hàm này kiểu như tối ưu hơn ý nhở làm xong hết mới render ra cho client

  • @cdhuan1003

    @cdhuan1003

    Жыл бұрын

    mình nghĩ là không thay thế được bạn, mỗi thằng nó có chức năng riêng của nó , như layoutEffect mà thay thế useEffect thì ví dụ như một cái gì đó mình cần xử lý logic trong nhiều và mất thời gian không lẽ phải chờ xử lý xong mới render ra UI nên là không thay thế được , ( theo ý kiến cá nhân mình là vậy )

  • @tamlongnguyen6604
    @tamlongnguyen66042 жыл бұрын

  • @VanTruong-jr4jz
    @VanTruong-jr4jz8 ай бұрын

    vậy tại sao không dùng 1 cái if để kiểm tra ở trong method handleRun để có thể setCount trực tiếp về 0 luôn mà lại dùng thêm useEffect ấy

  • @F8VNOfficial

    @F8VNOfficial

    8 ай бұрын

    Nó là ví dụ cho trường hợp cần dùng useLayoutEffect thôi bạn. Trong bài học mình khó để bê một ví dụ phức tạp trong thực tế vào được nên tạo ví dụ như vậy. Bạn đừng hiểu theo cách setCount về 0 là xong, mà hãy hiểu khi thay đổi data ở một hàm handle rồi ở một useEffect tiếp tục thay đổi nó thì sẽ xảy ra vấn đề đó. Đôi khi bạn làm dự án sẽ gặp tình huống đó, nó nhiều logic hơn nên được tách ra riêng một useEffect để xử lý. Giống như bạn xem các ví dụ của state management thì ví dụ của nó lúc nào cũng là cộng/trừ counter. Nhưng chúng ta không thể hiểu là state management là để làm counter, chúng ta cần tư duy liên hệ nó với các trường hợp khác.

  • @VanTruong-jr4jz

    @VanTruong-jr4jz

    8 ай бұрын

    @@F8VNOfficialem hiểu rồi, em cảm ơn admin ạ,

  • @nguyenquocan8949
    @nguyenquocan89492 жыл бұрын

    vậy túm lại là useEffect thì render xong mới gọi callback còn thần useLayoutEffect thì gọi callback trước mới render :))

  • @F8VNOfficial

    @F8VNOfficial

    2 жыл бұрын

    Gọi trước nhưng gọi đồng bộ. Túm lại như này làm sao giải thích đc case ở trên?

  • @trandinhthang5778
    @trandinhthang57782 жыл бұрын

    Theo mấy bài trước thì em hiểu là cleanup sẽ được thực thi trước khi unmount DOM, tới bài này thì anh listed ra là render UI rồi mới cleanup. Cho e hỏi là unmount DOM -> render UI -> Cleanup hay là cleanup -> unmount DOM -> render UI vậy ạ

  • @NhatNguyen-zg6il

    @NhatNguyen-zg6il

    2 жыл бұрын

    Theo tôi hiểu thì cleanup sẽ được thực thi khi unmount DOM và được gọi trước khi useEffect callback , như bài trước unmount là gỡ nó ra khỏi DOM luôn , còn trường hợp render UI này nó cập nhật lại biến count kia chứ không gỡ khỏi DOM nên cleanup sẽ được chay theo số 3 a Sơn chỉ là thực thi trước useEffect callback nên nó không liên quan gì đến render UI hay sao ấy

  • @dangbinh9493

    @dangbinh9493

    2 жыл бұрын

    Clean up khi component unmount và khi component update, trong trường hợp update lại thì thứ tự như trên đó bạn render UI > clean up > useEffect, tóm lại là nó có 2 case.

  • @Namlepy
    @Namlepy2 жыл бұрын

    Không phải là ít sài , Ví dụ như 1 navigate đi đến có truyền theo params Params default là true alway có dữ liệu thì nên dùng vì khi vào component này params sẽ chạy đầu tiên và có dữ liệu để load vào render nó sẽ hợp lý hơn là render sau đó mới state lại params và đở phải check empty valid cho cái object params được truyền qua đó

  • @F8VNOfficial

    @F8VNOfficial

    2 жыл бұрын

    Nếu luôn có dữ liệu thì đẩy vào view luôn sao phải dùng layout effect làm gì bạn nhỉ?

Келесі