React useEffect hook chi tiết dành cho người mới | React JS

Поділитися
Вставка
  • Опубліковано 21 сер 2024
  • 👉 Xem Lộ Trình Học: fullstack.edu....
    👉 Đăng Ký Học Offline Tại F8: short.f8team.d...
    Trong video này mình sẽ nói về React useEffect hook chi tiết dành cho người mới | React JS
    rất phù hợp cho các bạn mới học nhé. Video được chia làm 4 phần với mỗi ví dụ đi kèm giúp các bạn hình dung ra cách áp dụng React useEffect trong thực tế hơn 😍😍
    #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....
    Xây dựng giao diện với HTML, CSS: fullstack.edu....
    Xây dựng web responsive: fullstack.edu....
    Lập trình Javascript cơ bản: fullstack.edu....
    Lập trình Javascript nâng cao: fullstack.edu....
    Làm việc với Terminal & Ubuntu: fullstack.edu....
    Xây Dựng Website với ReactJS: fullstack.edu....
    Xây dựng web với Node & Express: fullstack.edu....
    HTML, CSS tips: fullstack.edu....
    Ứng dụng cảnh báo khi sờ lên mặt: fullstack.edu....
    Xem thêm tại: fullstack.edu....
    -------------------------------------
    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.

КОМЕНТАРІ • 89

  • @F8VNOfficial
    @F8VNOfficial  2 роки тому +32

    👉 Trong video có đoạn mình nói ngược, add/remove event listener mới là dựa trên observer pattern (publish/subscribe) các bạn nhé. Mình chia video làm 4 phần siêu chi tiết, các phần sau mỗi video khoảng hơn 10 phút. Mình sẽ nói về:
    1. useEffect với dependencies
    2. useEffect với DOM event listener
    3. useEffect với setInterval, setTimeout

    • @giahuyha6189
      @giahuyha6189 2 роки тому +2

      cho em hỏi là trong làm việc thực tế khi có nhiều Effect chỉ chạy 1 lần thì anh thường gom vào code chung trong 1 useEffect hay tách ra ạ

    • @ducvo1679
      @ducvo1679 2 роки тому +1

      cảm ơn thầy Sơn rất nhiều ạ 🥰

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому +6

      @@giahuyha6189 Logic khác nhau (làm các việc khác nhau) thì em tách ra làm nhiều useEffect nhé

  • @annbui6900
    @annbui6900 Рік тому +9

    Em cám ơn thầy Sơn nhiều lắm ạ. Nhờ loạt video giải thích tường tận ba cách dùng của useEffect, em đã đậu vào dream company 🙌🏼😄❤️
    Đây là lần thứ ba em phỏng vấn lại, tạch hai lần trước và cuối cùng lần này đậu. Lúc người ta hỏi về useEffect, em trả lời như được mùa ấy, tường tận phân tích 3 cách dùng lẫn ví dụ từ thầy Sơn.
    Cám ơn thầy Sơn đã rất có tầm có tâm, nhờ có video thầy Sơn không thôi em bơi theo mệt nghĩ. Hehe
    Chúc thầy Sơn luôn nhiều sức khỏe.
    Học trò từ phương xa 😄

  • @ThienNguyen-ec7le
    @ThienNguyen-ec7le 2 роки тому +2

    Tốc độ ra video quá tuyệt vời luôn học thôi ae ơi!

  • @hiephoangvan943
    @hiephoangvan943 2 роки тому +5

    Anh dạy rất kĩ, ngày nào cũng hóng anh ra bài mới để học ^^

  • @nguyenquocan8949
    @nguyenquocan8949 2 роки тому +3

    anh dạy kĩ vô cùng, dễ hiểu nữa

  • @mak8naf0813
    @mak8naf0813 2 роки тому +4

    cái cách vào video rồi mở laptop lên sau này có thể thành thương hiệu của anh Sơn luôn ấy (~ ̄▽ ̄)~

  • @deporesmartino1472
    @deporesmartino1472 2 роки тому +2

    Dạy rất kỹ và hay , cảm ơn anh nhiều

  • @petslover4306
    @petslover4306 2 роки тому +1

    Thật sự quá hay. Dạy rất có tâm ! Tuyệt vời.

  • @dpd246
    @dpd246 2 роки тому +1

    Hay quá anh ơi, em vẫn mông lung phần này mà nay anh nói em thấy dễ hiểu quá ạ ^^

  • @noras9835
    @noras9835 2 роки тому +1

    Cảm ơn anh video hữu ích lắm ạ, phong cách chân thật mà hiện đại 🤗

  • @tiendung2071
    @tiendung2071 Рік тому

    e cảm ơn a nhiều ạ, may mà có a mà mấy cái hook e làm quen trong 1 nốt nhạc

  • @duahaugaming8715
    @duahaugaming8715 2 роки тому +1

    cảm ơn anh, video hay quá, hôm qua em vừa gặp lỗi với call api ^^

  • @HuyNguyen-vl4yl
    @HuyNguyen-vl4yl 2 роки тому +1

    Cảm ơn anh video rất dễ hiểu

  • @benalpha2297
    @benalpha2297 2 роки тому +1

    Hóng video a Sơn như hồi xưa hóng quà mẹ đi chơ về :)))))))))

  • @dung_gl
    @dung_gl 2 роки тому +1

    quá đỉnh luôn anh ơi

  • @hoaimiqng
    @hoaimiqng 2 роки тому

    Fan cứng 😊

  • @ThinhNguyen-zb6rv
    @ThinhNguyen-zb6rv 2 роки тому

    Quá tuyệt vời anh ơi , em cảm ơn anh nhìuuu

  • @tiendatniit
    @tiendatniit Рік тому

    Video vô cùng bổ ít cho ae nào muốn leo rank :)

  • @duongnguyen6647
    @duongnguyen6647 2 роки тому +1

    Video này anh đc 9.5đ thôi nhé, ì phéc k phải e phệch nha anh 😀

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому +2

      Âm "k" mà đọc lên giọng á em. Em lại cao thủ Eng lích à 🤣🤣. Vẫn cảm ơn góp ý của em nhiều nha vì nhiều từ anh vẫn đọc sai tè le ý mà. Chủ yếu em nên focus vào nội dung nhé

  • @duyphan2919
    @duyphan2919 2 роки тому +1

    anh dạy kĩ quá chắc em khỏi đọc docs :))

  • @nhanhautran3882
    @nhanhautran3882 Рік тому

    Em cám ơn anh rất nhiều !!!

  • @pineapplesub3581
    @pineapplesub3581 2 роки тому

    Hay quá anh ơi!

  • @QNhuCK
    @QNhuCK 2 роки тому +8

    Anh cho em hỏi, em đọc doc React có đoạn này:
    [ Does useEffect run after every render? Yes! By default, it runs both after the first render and after every update. (We will later talk about how to customize this.) Instead of thinking in terms of “mounting” and “updating”, you might find it easier to think that effects happen “after render”. React guarantees the DOM has been updated by the time it runs the effects. ]
    Theo em hiểu thì mounted với render là không giống nhau, nhưng đoạn này nói nghe có vẻ giống nhau. Anh giải thích thêm chỗ này giúp em được không ạ?

    • @NguyenNguyen-fj1qh
      @NguyenNguyen-fj1qh Рік тому +8

      Trong React, mỗi component có một hàm render() chứa các thông tin về cách component sẽ được hiển thị trên trình duyệt. Khi component được tạo ra và thêm vào DOM, điều này gọi là "mounting".
      Quá trình mounting bắt đầu bằng việc tạo một instance của component và gọi hàm componentDidMount(), sau đó component được thêm vào DOM. Nếu trạng thái của component thay đổi, hàm render() sẽ được gọi lại để cập nhật UI và hiển thị các thay đổi mới.
      Vậy, "mounting" là quá trình tạo ra và thêm component vào DOM, trong khi "render" là việc hiển thị component trên trình duyệt dựa trên thông tin trong hàm render().
      Ví dụ, chúng ta có một component tên là UserProfile với một thuộc tính username:
      import React, { useState, useEffect } from 'react';
      function UserProfile({ username }) {
      const [userData, setUserData] = useState(null);
      //componentDidMount()
      useEffect(() => {
      // Call API to fetch user data
      fetch(`api.example.com/users/${username}`)
      .then(response => response.json())
      .then(data => {
      setUserData(data);
      });
      }, [username]);
      if (!userData) {
      return Loading...;
      }
      //render()
      return (

      {userData.name}
      {userData.email}

      );
      }
      Khi component UserProfile được tạo ra và thêm vào DOM, hàm componentDidMount() sẽ được gọi. Trong ví dụ trên, chúng ta sử dụng useEffect để gọi API và lấy dữ liệu của người dùng. Khi dữ liệu được trả về, chúng ta sử dụng setUserData để cập nhật trạng thái và gọi lại hàm render() để hiển thị thông tin của người dùng.

  • @huyhoang8679
    @huyhoang8679 2 роки тому +2

    Video bổ ích.
    Hời ơi bảo sao nó chạy vô tận, lên đọc docs chục lần vẫn ko biết chán nản luôn. Mà anh ơi đọc docs cũng phải có cách đúng ko ạ, em đọc doc thật sự thấy trang Mozila là giao diện đẹp, dễ nhìn dễ tim, dễ hiểu, em có đọc docs của Microsoft mà thấy rối quá.

    • @anhJourney
      @anhJourney 2 роки тому +1

      docs nhiều cái xem hiểu sơ sơ thôi chứ chủ yếu vẫn phải có thầy dậy mới hiểu được bạn ạ. Như sau học react rồi học Material UI ko có thầy dạy bó tay luôn =))

  • @congnamle3632
    @congnamle3632 2 роки тому

    Hay quá anh ơi

  • @minhduynguyen884
    @minhduynguyen884 2 роки тому +5

    Sao em thử console.log trong useEffect( () => { console.log('test') }) thì nó lại in ra test tới 2 lần vậy á. Mong được các cao nhân chỉ giáo

    • @vunguyenhuy3688
      @vunguyenhuy3688 2 роки тому +1

      mình cũng bị xong bạn pp nào chưa'

    • @atchaukhac7731
      @atchaukhac7731 Рік тому +1

      đoạn 17:10s a Sơn có nói do cái Strictmode nha các bạn.

  • @huy4854
    @huy4854 2 роки тому

    Anh làm API luôn nha anh

  • @vangianginh4224
    @vangianginh4224 2 роки тому

    hay quá a ơi

  • @NamLe-sl4qy
    @NamLe-sl4qy 2 роки тому

    13:05 giải thích tại sao viết code trong useEffect

  • @tuantuthan8825
    @tuantuthan8825 2 роки тому

    cảm ơn anh ạ

  • @hieunguyenthanh5328
    @hieunguyenthanh5328 3 місяці тому

    ❤❤❤❤

  • @luubaoncter8734
    @luubaoncter8734 2 роки тому +2

    Về ví dụ sử dụng useEffect chỉ truyền callback ở phút 8:50 thì em/mình có thắc mắc là: Trong thẻ input mình đâu cần phải đặt lại attribute value={ title } đúng không anh/mọi người ?

    • @realhoanghai
      @realhoanghai 2 роки тому +2

      đặt để tận dụng 2 way binding á b

    • @trandinhthang5778
      @trandinhthang5778 2 роки тому +2

      không nhất thiết phải đặt trong mọi trường. trường hợp như bạn muốn set lại value rỗng thì mới cần

  • @lanhanhnguyen4577
    @lanhanhnguyen4577 2 роки тому

    Chạy bo không bằng a Sơn ra video rùi^^

  • @thunguyen-om4mb
    @thunguyen-om4mb 2 роки тому +2

    a ơi , a có mở lớp online dạy js k ạ ?

  • @deverycode
    @deverycode 2 роки тому +1

    Học xong khóa React JS thử build quả web F8 clone =)))

  • @NamLe-sl4qy
    @NamLe-sl4qy 2 роки тому

    17:00 strictMode

  • @DeepDiveIntoLife196
    @DeepDiveIntoLife196 2 роки тому +1

    Chào anh ...

  • @hungoan7699
    @hungoan7699 Рік тому +1

    A Sơn e có 1 số câu hỏi về kỹ thuật muốn hỏi thì có thể gửi qua đâu được anh?

  • @vankhanhinfo
    @vankhanhinfo 2 роки тому +1

    Cho em hỏi chút, mỗi lần nhập ký tự vào ô input thì lại re-render lại component, điều này có ảnh hưởng đến performant ko ạ, ví dụ component đó có nhiều element

    • @lightd1404
      @lightd1404 Рік тому

      theo mình nghĩ là nõ cũng ảnh hưởng đó nhưng với dụ án to =)) cón như mh ví dụ nhỏ nhỏ thì chắc k sao

  • @nguoixanh
    @nguoixanh 2 роки тому +1

    Bạn ơi cho mình hỏi:
    Mình tạo custom hook (call API), tại component sử dụng nó, mình muốn là khi nhấn vào 1 button mới gọi hook để call API, nên mình call hook trong hàm handleClick, nhưng nó báo "Invalid hook call. Hooks can only be called inside of the body of a function component".
    Có cách nào giải quyết (trong thực tế đi làm) bạn nhỉ?

    • @trietnguyenhoangminh8811
      @trietnguyenhoangminh8811 Рік тому

      này là do bạn đang dùng class component nên nó mới ko cho sử dụng hook đó

  • @benalpha2297
    @benalpha2297 2 роки тому

    20:28 Anh cho em hỏi chỗ này khi setPosts bằng một giá trị reference (như array trong clip) thì sẽ bị rơi vào lòng lặp vô tận, nhưng khi setPosts là một giá trị primitive như số hoặc chuỗi thì lại ko bị nhỉ?

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому +3

      React nó dùng toán tử === để so sánh, nếu state mới khác state cũ nó sẽ render lại em nhé. Trong ví dụ dùng array như trong clip bị render lại vì mỗi lần setPosts là 1 array mới em nhé (khác địa chủ vùng nhớ).

    • @benalpha2297
      @benalpha2297 2 роки тому

      @@F8VNOfficial À à em quên mất, state nó trùng với state trước thì nó đâu render lại làm gì haha 😁 Cảm ơn anh.

  • @vuongqtvn
    @vuongqtvn 2 роки тому

    ❤️

  • @pntmusic8670
    @pntmusic8670 2 роки тому +1

    Trong useEffect ta return thi ket qua nhu nao anh

  • @linhtaquang8650
    @linhtaquang8650 2 роки тому

    Mình làm giống anh Sơn, nhưng dùng API trên trang thời tiết. Cứ mỗi lần f5 thì giá trị lại trở về giá trị undifined, gây ra lỗi k trỏ đến được property mọi người có thể chỉ mình cách khắc phục không

  • @thanhhuytruong31
    @thanhhuytruong31 2 роки тому +2

    anh ơi , vậy return trong useEffect thì sao ạ

    • @tuanpham-vb5sd
      @tuanpham-vb5sd 2 роки тому +1

      phần code return sẽ đc chạy khi component unmount đấy b

  • @CuongNguyen-oh5xm
    @CuongNguyen-oh5xm 9 місяців тому

    em thấy anh để lại cái stricMode 17:49 nhưng 23:22 anh vẫn chạy 1 lần là sao ạ. em kh hiểu

  • @vunguyenhuy3688
    @vunguyenhuy3688 2 роки тому

    sao em viết như anh mà gọi content thì dù sài useEffect vẫn in ra mounted vậy

  • @namlethanh607
    @namlethanh607 2 роки тому

    Anh cho em hỏi sao em mở cái console lên mà nó không hiện gì ạ

  • @manquangduy6932
    @manquangduy6932 8 місяців тому

    trường hợp 1 nó lắp vô cùng là vì sao ạ

  • @tripham8864
    @tripham8864 2 роки тому

    Về sau anh có dùng axios để gọi api ko ạ. E đang dùng th này với useEffect nhưng còn khá mơ hồ

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому

      Khác gì đâu em nhỉ, trong JS có XHR và fetch để call API thôi. Thì axios cũng là dùng XHR thôi mà, mơ hồ kiểu gì em nói ra anh xem

    • @tripham8864
      @tripham8864 2 роки тому

      @@F8VNOfficial dạ, khi e ở component con dùng POST và cập nhật lại state ở component cha có useEffect dùng GET thì lệnh GET của component cha ấy chưa nhận đc cái của th POST mà re-render luôn ạ. Có vẻ như vấn đề này là side effects chứ ko nằm ở axios ạ. E cảm ơn a đã quan tâm.

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому

      ​@@tripham8864 Đúng rồi em, không liên quan gì tới axios hết em nhé. Em check lại xem tác nhân nào gây ra việc component cha bị re-render nhé, xem có thao tác nào setState hay dispatch redux action nào gây ra việc re-render đó.

    • @tripham8864
      @tripham8864 2 роки тому

      @@F8VNOfficial em fix được rồi cảm ơn a. Hóng về sau a có video về tổ chức call API chứ gọi trực tiếp ở useEffect có vẻ ko chuyên nghiệp lắm :D

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому

      ​@@tripham8864 Theo em không chuyên nghiệp ở chỗ nào em?

  • @vuongtranminh4890
    @vuongtranminh4890 2 роки тому

    Nếu phần callAPI e để là 1 hàm return về posts ở giá trị initial của useState thì cũng chỉ được gọi có 1 lần như vậy có được không ạ? A giải thích cho e với ạ

    • @trandinhthang5778
      @trandinhthang5778 2 роки тому +2

      useState sẽ được thực thi rồi mới render UI. viêc bạn call api sẽ block việc render UI rồi. vì vậy nên sử dụng useEffect vì hàm callback trong useEffect sẽ được gọi sau khi render UI. anh Sơn có giải thích khúc side effect đó bạn

    • @vuongtranminh4890
      @vuongtranminh4890 2 роки тому

      @@trandinhthang5778 cảm ơn bạn mình hiểu rõ rồi

  • @triuc8755
    @triuc8755 Рік тому

    Có ai biết cách co, kéo của sổ ưindow phút @5:50 như anh sơn không?
    Chỉ mình với.
    Mò mãi không ra

  • @NamLe-sl4qy
    @NamLe-sl4qy Рік тому

    7:32 Tại sao đoạn này cũng dùng StrictMode mà nó không console log ra "Mounted" 2 lần vậy ạ, e thử nó console log ra 2 lần mà a?

    • @ThangNguyen-wh2vk
      @ThangNguyen-wh2vk 5 місяців тому

      mình cũng bị như này, bây h bạn biết lý do chưa chỉ cho mình vs, mình cảm ơn bạn nhiều

    • @rayun7014
      @rayun7014 4 місяці тому

      @@ThangNguyen-wh2vk Mình xóa StrictMode đi bạn mình cũng bị v

  • @ngthuongnguyen9804
    @ngthuongnguyen9804 2 роки тому

    A ơi cho e hỏi, sau lần .then() thứ nhất thì kết quả nhận về .then() thứ 2 chứa data rồi sao mình còn đặt state là mảng rỗng đc ạ

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому

      Ở phút/giây nào em nhỉ

    • @ngthuongnguyen9804
      @ngthuongnguyen9804 2 роки тому

      @@F8VNOfficial vâng a, ở phần promis bắt đầu phút thứ 20 a ơi?

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому +1

      Mảng rỗng nó đặt làm initialState thôi em ơi, sau đó, API gọi lấy đc mảng dữ liệu posts (phần then thứ 2) sẽ set lại state em nhé. Sau khi set lại, thì state posts không phải là mảng rỗng ban đầu nữa.

    • @ngthuongnguyen9804
      @ngthuongnguyen9804 2 роки тому

      Dạ vâng, e cảm ơn a!

    • @ngthuongnguyen9804
      @ngthuongnguyen9804 2 роки тому

      cho e làm phiền a xíu nữa. cho e hỏi trong thằng .then() thứ 2 là: .then(posts => {setPosts(posts)} ) thằng posts đứng trước, trước khi setPosts nó rỗng hay chứa dữ liệu api trả về ạ. e cảm ơn anh

  • @Steve_Duong
    @Steve_Duong 2 роки тому

    ❤❤❤❤