Two-way binding | Ràng buộc hai chiều | React hooks

แชร์
ฝัง
  • เผยแพร่เมื่อ 8 ก.ย. 2024
  • 👉 Xem Lộ Trình Học: fullstack.edu....
    👉 Đăng Ký Học Offline Tại F8: short.f8team.d...
    Trong bài học này chúng ta sẽ cùng tìm hiểu về khái niệm Two-way binding | Ràng buộc hai chiều | React hooks
    Two-way binding là ràng buộc dữ liệu 2 chiều, điều này thường được nhắc tới khi các bạn làm việc với biểu mẫu (form) trong các lib/framework front-end. Trong video này chúng ta sẽ cùng nhau đi qua các ví dụ để các bạn có thể ứng dụng được useState() nhé.
    #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.

ความคิดเห็น • 135

  • @F8VNOfficial
    @F8VNOfficial  ปีที่แล้ว +12

    React là 1 (one) way binding. Việc chúng ta binding state vào value của input để nó trở thành 2 (two) ways binding các bạn nhé. Khi đi phỏng vấn, NTD mà hỏi React là 1 way binding hay 2 ways binding thì các bạn trả lời là 1 way binding nhé (mình có nói ở 08:12).
    Các bạn tham khảo thêm:
    - reactjs.org/docs/two-way-binding-helpers.html (helper dùng cho React < v15 để dễ dàng triển khai 2 ways binding)
    - reactgo.com/two-way-data-binding-react/

    • @namnguyen-gk5kx
      @namnguyen-gk5kx 7 หลายเดือนก่อน

      A có thể giải thích hàm handleCheck 1 nơi dùng object course.id, 1 nơi dùng id không ạ, mong a phản hồi sớm

  • @KhangNguyen-kq2iw
    @KhangNguyen-kq2iw 2 ปีที่แล้ว +20

    Thầy Sơn dạy dễ hiểu ghê luôn, mang lại kiến thức rất khác biệt, có thể áp dụng vào các dự án thực tế, vừa kĩ càng, vừa chứa lượng kiến thức rất lớn luôn

  • @haingotue4008
    @haingotue4008 2 ปีที่แล้ว +8

    Thầy dạy siêu có tâm, em học đi học lại bài này cố gắng nuốt từng chữ thầy dạy. Em cảm ơn thầy nhiều ạ

  • @hieulevan4300
    @hieulevan4300 2 ปีที่แล้ว +15

    Nếu có kiếp sau em nguyện làm vợ a Sơn để chăm sóc cho a cả đời

  • @maivan5759
    @maivan5759 ปีที่แล้ว +1

    anh dạy cực hay, cực có tâm, cực chi tiết, xem của anh xong xem những người khác thấy chênh lệch thật sự, cảm ơn anh, chúc anh nhiều sức khỏe

  • @MagicMusiclike
    @MagicMusiclike 2 ปีที่แล้ว +3

    Cảm ơn những kiến thúc anh chia sẻ, xem video của anh có thể nói là kỹ càng từng chút một, em học hỏi được rất nhiều kiến thức từ những video của anh. Cảm ơn anh đã mang giá trị rất lớn cho cộng đồng coder .

  • @quanta7687
    @quanta7687 2 ปีที่แล้ว +4

    trước em học đến đây ko biết vận dụng vào kiểu gì bây giờ anh dạy kèm ví dụ đúng tuyệt với luôn mong là mỗi hook anh đều có ví dụ

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว

      Như em mới học thì em thấy những cái nào khó hiểu trong React?

  • @vanle8514
    @vanle8514 2 ปีที่แล้ว +1

    Ví dụ checked đưa ra quá hay. Thông não. Like!

  • @hoangduong610
    @hoangduong610 2 ปีที่แล้ว +1

    đang khó state này vô xem video của a cái làm được luôn

  • @dpd246
    @dpd246 2 ปีที่แล้ว +2

    Em cảm ơn anh ạ. Nhờ có phần checkbox của anh mà em hiểu thêm bản thân cần cải thiện thêm về logic ạ .

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว +4

      Đúng rồi em, làm lập trình thì mình cần nảy ra cách làm với logic trước rồi mới làm

  • @tonalone2912
    @tonalone2912 2 ปีที่แล้ว +1

    hay anh. Kiến thức này ở các kênh khác không có.
    Giúp em hiểu rõ hơn về React.
    Thanks anh nhiều!

  • @yenka3205
    @yenka3205 2 ปีที่แล้ว +3

    Đã học và hiểu. Cảm ơn thầy Sơn rất nhiều
    import { useState } from "react";
    const giftList = ["CPU i9", "RAM 32GB RGB", "RGB Keyboard"];
    const courseList = [
    {
    id: 1,
    name: "HTML, CSS",
    },
    {
    id: 2,
    name: "Javascript",
    },
    {
    id: 3,
    name: "ReactJs",
    },
    ];
    function App() {
    const [gift, setGift] = useState();
    const [name, setName] = useState("");
    const [email, setEmail] = useState("");
    const [checked, setChecked] = useState(2);
    const [checkedBox, setCheckedBox] = useState([]);
    const handleRandomGift = () => {
    const index = Math.floor(Math.random() * giftList.length);
    setGift(giftList[index]);
    };
    const handleSubmit = () => {
    console.log({ name, email });
    };
    const handleSubmitCourse = () => {
    console.log({ id: checked });
    };
    const handleCheckBox = (id) => {
    setCheckedBox((prevState) => {
    const isCheckedBox = checkedBox.includes(id);
    if (isCheckedBox) {
    return checkedBox.filter((item) => item !== id);
    } else {
    return [...prevState, id];
    }
    });
    };
    const handleSubmitCourseBox = () => {
    console.log({ idList: checkedBox });
    };
    return (


    {gift || "Chưa có phần thưởng"}
    Lấy thưởng



    Name:
    setName(e.target.value)} />



    Email:

    setEmail(e.target.value)} />

    Register


    {courseList.map((course) => (

    setChecked(course.id)}
    id={`course-${course.id}`}
    />

    {course.name}


    ))}
    Submit Course


    {courseList.map((course) => (

    handleCheckBox(course.id)}
    id={`course-checkbox-${course.id}`}
    />

    {course.name}


    ))}
    Submit Course


    );
    }
    export default App;

  • @anhtrannguyenminh250
    @anhtrannguyenminh250 2 ปีที่แล้ว +1

    cảm ơn anh đã gợi ý một ý tưởng hay phần checkbox

  • @tuananhhoang9528
    @tuananhhoang9528 2 ปีที่แล้ว +1

    Ân nhân của em đây rồi. Đúng phần checkbox em cần

  • @phungtruongdinhquan7765
    @phungtruongdinhquan7765 2 ปีที่แล้ว +1

    Em phải coi đi coi lại cái đoạn logic đấy, anh đã giải thích kỹ mà e đọc vẫn lú =)))

  • @dattranthanh6757
    @dattranthanh6757 2 ปีที่แล้ว +1

    Anh giảng hay quá. Cám ơn anh.

  • @DavidJames535
    @DavidJames535 2 ปีที่แล้ว +1

    Hay quá anh . Giờ e được thông não 🤩🤩

  • @thanhlamnguyenvo5717
    @thanhlamnguyenvo5717 2 ปีที่แล้ว +10

    Cho em hỏi chỗ 21:30 sao không dùng onChange={handleCheck(id)} được mà phải dùng onChange={() => handleCheck(id)} vậy ạ?

    • @DavidJames535
      @DavidJames535 2 ปีที่แล้ว +4

      với reactjs nó sẽ tự chạy dòng mặc dù bạn chưa gọi hàm đó . Nên sẽ để lồng thêm hàm ở ngoài nữa

    • @vuongnh1705
      @vuongnh1705 2 ปีที่แล้ว +3

      () là dấu gọi hàm nếu bạn gọi handleCheck(id) thì khi load giao diện lên nó sẽ chạy hàm đó luôn mặc dù bạn chưa click vào button

  • @ongangminh6627
    @ongangminh6627 2 ปีที่แล้ว +1

    Thuật ngữ Two-way binding nó same same như controlled component và One-way binding nó là uncontrolled component cho ae nào chưa biết

  • @vietuc8485
    @vietuc8485 2 ปีที่แล้ว +1

    tks anh video bổ ích quá ạ

  • @khanhbt14
    @khanhbt14 2 ปีที่แล้ว +1

    Bài này a giảng hay quá

  • @hieptrinh8215
    @hieptrinh8215 2 ปีที่แล้ว +1

    dạy cuốn thực sự, cám ơn bạn nhiều!

  • @HuyLe-ee1uz
    @HuyLe-ee1uz 2 ปีที่แล้ว +1

    Clip anh làm vui quá

  • @bynemusic311
    @bynemusic311 2 ปีที่แล้ว +1

    đợi mãi a sơn mới ra

  • @KhanhNguyen-hl5ot
    @KhanhNguyen-hl5ot 2 ปีที่แล้ว +1

    anh dạy dễ hiểu thiệt sự ❤❤❤

  • @hoangnguyen-rv9jg
    @hoangnguyen-rv9jg 2 ปีที่แล้ว +5

    Em làm giống anh mà cmp của em khi khởi tạo hay khi setState đều bị re-render 2 lần(cả ví dụ change input đơn giản code giống a). Anh giải thích hộ em chỗ này vs ạ
    import {useState} from "react"
    import React,{useState} from "react"
    function App() {
    const [job,setJob] = useState('');
    console.log(job)// bị re-render 2 lần mỗi khi setJob hoặc khởi tạo cmp
    return (


    setJob(e.target.value)}/>
    Add


    );
    }
    export default App;
    ** note: Em học tới bài useEffect thì đã tìm ra nguyên nhân r ạ. Do thằng => log ra 2 lần :((

    • @xuanmanhdao
      @xuanmanhdao ปีที่แล้ว

      Mình xem tuần tự nên đến video này cũng bị giống bạn loay hoay suốt không hiểu tại sao 🥲

    • @SonNguyen-pg9ms
      @SonNguyen-pg9ms ปีที่แล้ว

      xem đến useEffect là hiểu hả bn mình cũng bị v

  • @phamquangthieu00
    @phamquangthieu00 2 ปีที่แล้ว +2

    Mong khóa Node sắp tới của anh Sơn sẽ là NestJS ạ

  • @phanducanh96
    @phanducanh96 2 ปีที่แล้ว +1

    Vãi thầy nói nhầm :)), cơ mà vẫn dễ hiểu ạ hehe

  • @thanhduynguyen6253
    @thanhduynguyen6253 9 หลายเดือนก่อน

    với ví dụ của checkbox thì ko cần attribute checked={checked.includes(course.id)} cũng được ạ

  • @lamle6397
    @lamle6397 2 ปีที่แล้ว +1

    bài này quá hay luôn

  • @tuanato5973
    @tuanato5973 2 ปีที่แล้ว +3

    Không sao đâu anh ơi, đoạn đấy nghe phát biết anh nói nhầm mà =)))))

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว +1

      Oki thế thì ngon, anh kiểu bị ám ảnh ấy haha. Rõ ràng học tới đây ai cũng phải hiểu rõ về array methods rồi mà anh cứ đi lo thừa 🤣

    • @tuanato5973
      @tuanato5973 2 ปีที่แล้ว +1

      @@F8VNOfficial anh có dặn là phải học kỹ lại js cơ bản rồi mới qua react mà 🤣 nên em nghĩ mn đều hiểu

  • @quangminh8580
    @quangminh8580 2 ปีที่แล้ว

    cảm ơn thầy rất nhiều !

  • @phanhaiang7052
    @phanhaiang7052 2 ปีที่แล้ว +2

    Anh bị ám ảnh sự hoàn hảo hả a >

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว

      Em hiểu rõ về cái này ko, có vẻ anh bị thế thật hic

    • @phanhaiang7052
      @phanhaiang7052 2 ปีที่แล้ว

      @@F8VNOfficial dạ hong anh ơi 😂😂😂😂

    • @KhangNguyen-kq2iw
      @KhangNguyen-kq2iw 2 ปีที่แล้ว

      @@F8VNOfficial hehe, nhờ thầy Sơn có sự cầu toàn trong mọi việc, nên các bài giảng của thầy lúc nào cũng đi vô rất rất là chi tiết v nè, ai xem kênh thầy đều có và sẽ có cái nền móng vững vàng lắm luôn, mãi iu thầy giáo Sơn

    • @phattrantuan1564
      @phattrantuan1564 10 หลายเดือนก่อน

      @@F8VNOfficial có câu "nhất cần thiên hạ vô nan sự" đấy anh. Hiểu nôm na là khi một người thể hiện sự tươm tất của mình thì người xung quanh cũng được hưởng phúc từ cái sự chu đáo của người đó nữa.

  • @TienPhan-ih6ij
    @TienPhan-ih6ij 2 ปีที่แล้ว +1

    Bắt đầu thấy căng căng rồi

  • @atnguyen5240
    @atnguyen5240 ปีที่แล้ว

    bài hay quá anh ơi em xem tận 3 lần vẫn chưa hiểu phai tin

  • @NamangMinh1
    @NamangMinh1 2 ปีที่แล้ว +2

    Anh Sơn ơi.Bao giờ anh ra xong khóa reactjs thì anh ra react native nhé anh

  • @available6733
    @available6733 2 ปีที่แล้ว +1

    yêu thầy Sơn

  • @hoangtri9569
    @hoangtri9569 2 ปีที่แล้ว +1

    a Sơn đúng kiểu chơi html element thuần :v ngoài kia toàn mấy ông chơi Formik, React Hook form

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว +7

      Share kiến thức thì share phần base thôi em. Sau anh em thích dùng cái gì thì đọc docs dùng mà vẫn hiểu bản chất. Dùng lib ngay nhiều khi không hiểu nó làm gì

  • @HTTOffical
    @HTTOffical 2 ปีที่แล้ว +1

    Thầy sơn làm khóa React Naitve đi ạ

  • @nguyenngoctri2207
    @nguyenngoctri2207 2 ปีที่แล้ว +1

    Quá hay

  • @vanhieule9248
    @vanhieule9248 หลายเดือนก่อน

    mn cho em hỏi là khi onchane gọi đến setChecked thì nó phải render hết lại thì tại sao nó vẫn giữ trạng thái được chọn nhỉ, em nghĩ khi render lại thì không còn cái nào được chọn chứ ạ

  • @TuanAnhNguyen-vn7mo
    @TuanAnhNguyen-vn7mo 2 ปีที่แล้ว +2

    Có extension nào gợi ý html với css trong js ko ạ

  • @sonlehung6193
    @sonlehung6193 ปีที่แล้ว

    bài này khá khoa

  • @becode9266
    @becode9266 2 ปีที่แล้ว +2

    Sao nhìn anh SƠn giống diễn viên trong phim "hương vị tình thần" thế nhỉ?

  • @thanhduynguyen6253
    @thanhduynguyen6253 9 หลายเดือนก่อน

    Trong bài học này và so sánh với vue khi sử dụng devtool của 2 thằng thì e thấy các state (có thể gọi là biến) trong reactjs không chi tiết như VueJs, vì trong vue các state hiện hẳn tên của state chứ ko như ReactJs chỉ hiện "State"

  • @NamLe-sl4qy
    @NamLe-sl4qy 2 ปีที่แล้ว +1

    13:00 bỏ value trong input đi nó vẫn in ra được trong console.log mà b 😅

  • @giaitri24h16
    @giaitri24h16 2 ปีที่แล้ว +1

    Mọi người cho mình hỏi: 1) Sao chỗ syle này lại cần 2 ngoặc nhọn nhỉ. mình để 1 thì báo lỗi, 2) tại sao lại để là 32 mà không phải là 32px vậy. Mong mọi người giải đáp giúp mình.

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว

      Bạn xem lại bài JSX nhé

  • @vncoolestguy
    @vncoolestguy ปีที่แล้ว

    27:00 line 35 nó là return prev.filter(item=>item !== id) chứ nhỉ ?

  • @vuongqtvn
    @vuongqtvn 2 ปีที่แล้ว +1

    chào anh 🙌🙌

  • @AnAn-mb8ld
    @AnAn-mb8ld 2 ปีที่แล้ว +1

    Kiểu dử liệu tham chiếu trong js ở video nào v anh

  • @NgocNguyen-lt9yv
    @NgocNguyen-lt9yv 2 ปีที่แล้ว +2

    Mn cho e hỏi. E làm phần checkbox ko cần có đoạn "checked = {checked.includes(course.id)}" để hiển thị phần được chọn như của a Sơn, nhưng kết quả vẫn đúng thì ntn ạ. Vì trong video e thấy nếu ko có thì nó sẽ ko hiện lên cái tick màu xanh ạ.

    • @hoangnguyen-rv9jg
      @hoangnguyen-rv9jg 2 ปีที่แล้ว +2

      Trong trường hợp giá trị khởi tạo là mảng rỗng [] thì của bạn là đúng. Nhưng trong trường hợp giá trị khởi tạo là mảng có phần tử [1,2,3] ... Thêm một số case không tác động tới checkbox nhưng giá trị checked vẫn phải thay đổi => cách làm của bạn bị thiếu nhé.

  • @blockchain_bull
    @blockchain_bull ปีที่แล้ว

    hóng khóa springboot nâng cao ạ.

  • @tuanato5973
    @tuanato5973 2 ปีที่แล้ว +1

    Chấmmmmm

  • @toannq98
    @toannq98 2 ปีที่แล้ว

    Trường hợp có nhiều block check box như kiểu filter by price, filter by category thì mình làm như nào mọi người nhỉ? Phải tạo ra nhiều checked à hay có cách nào viết để dùng chung không ạ?

  • @Mossad84
    @Mossad84 ปีที่แล้ว

    Mình xem bài này không dưới 5 lần mới thông.

  • @vankhanhinfo
    @vankhanhinfo 2 ปีที่แล้ว +1

    khi save ở vs code thì page ko auto load, có ae nào biết cách fix ko nhỉ

  • @ToanHuynh2910
    @ToanHuynh2910 2 ปีที่แล้ว +1

    cho mình hỏi là tại sao mình dùng splice như bên dưới thì lại không hoạt động đúng dc nhé:
    function handleOnChange(id) {
    setChecked((prev) => {
    const isChecked = checked.includes(id);
    if (isChecked) {
    /* return checked.filter((item) => item !== id); */
    checked.splice(checked.indexOf(id), 1);
    return checked;
    } else return [...prev, id];
    });
    }

    • @hoangnguyen-rv9jg
      @hoangnguyen-rv9jg 2 ปีที่แล้ว +1

      Mình có tìm hiểu và thử lại . Bạn dùng splice sẽ đổi cả giá trị checked và pre. Nghĩa là setState bạn truyền lại chính nó(không thay đổi giá trị tương tự setState(pre=> pre) ) nên sẽ không re-render lại khi gọi setState

  • @truongtranvan7590
    @truongtranvan7590 2 ปีที่แล้ว +1

    Cho em hỏi trong hàm handleCheck. Mảng "checked" với mảng "prev" nó giống hay khác nhau vậy anh, tại thấy khúc trên a dùng mảng "checked", khúc cuối push id vào a dùng mảng "prev"

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว +1

      À ở đây nó giống nhau thôi, anh copy lên nên nhầm trên lại dùng checked, em xem bài trước để hiểu là nó giống nhau nha em

  • @bynemusic311
    @bynemusic311 2 ปีที่แล้ว

    A sơn bao giờ a làm một khóa Angular đi ạ

  • @munkchip710
    @munkchip710 2 ปีที่แล้ว +1

    cho e hỏi ở 26:54 dòng 35 và 37, sao mình ko thay biến checked thành biến prev nhỉ

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว +2

      A ko để ý thôi, em dùng prev cho đồng nhất nhé. Còn 2 biến đều lưu cùng 1 địa chỉ vùng nhớ thôi

    • @munkchip710
      @munkchip710 2 ปีที่แล้ว +1

      @@F8VNOfficial e cảm ơn thầy Sơn nhiều, e đi làm gần 1 năm, main React sáng tới tối nhưng khi xem thầy dạy thì đều học được cái mới 😁😁

  • @edward_7_3_9
    @edward_7_3_9 2 ปีที่แล้ว +1

    tại sao lúc filter return luôn cái state mà không setState lại nhưng nó vẫn nhận được vậy anh ơi.

    • @leehoan4760
      @leehoan4760 2 ปีที่แล้ว

      vì hàm filter nó lặp cái mảng đang có bao nhiêu phần tử đang đc check xong nó filter thằng nào có id khác id trong mảng và nó trả về mảng mới gồm các phần tử trừ thằng id kia ra => setState lúc này là mảng có 2 nên show ra đc 2

  • @vanthemvo4954
    @vanthemvo4954 2 ปีที่แล้ว +1

    làm form mà seState như vậy thì sẻ bị re-render rất nhiều, sẻ ko tốt cho per, anh ra bài hướng dẫn xử lý re-render ạ.

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว +15

      Em hiểu nhầm rồi đó, ai bảo em là re-render là không tốt cho performance? Re-render là việc cần thiết để update được trạng thái ứng dụng ra UI. Chỉ có việc re-render không kiểm soát và re-render không cần thiết mới ảnh hưởng tới performance. Giải quyết bằng cách chia component hợp lý và sử dụng các hooks như useMemo, useCallback và React.memo để giải quyết. Em không nên nghĩ render lại nhiều là ảnh hưởng, mà render lại thừa mới ảnh hưởng. Trong tình huống này ko có vấn đề gì về perfomance em nhé. Sau anh ra video về performance sau nha em.

    • @vanthemvo4954
      @vanthemvo4954 2 ปีที่แล้ว +2

      @@F8VNOfficial Cảm ơn trả lời của anh, em hiểu ra vân đề ở đâu rồi. Chúc anh nhiều sức khỏe!

  • @vanvantran1061
    @vanvantran1061 2 ปีที่แล้ว +1

    phút thứ 21:25 tại sao không thể lấy được id từ vị trí handleCheck vậy anh, và tại sao lại dùng 1 hàm cha để gọi lại hàm HandleCheck mà ko truyền thẳng hàm handleCheck vào vậy ạ

    • @trungphanphuoc1426
      @trungphanphuoc1426 2 ปีที่แล้ว +1

      handleCheck là cái function, out of scope nên k thấy lấy đc cái id, nên phải truyền param vào để xử lý.
      2. Để dễ maintain, xử lý, clean code hơn :)))

    • @tuannguyenhuu964
      @tuannguyenhuu964 2 ปีที่แล้ว

      vì chỉ có thể lấy được id khi đoạn code nằm bên trong cái method MAP thôi bạn

  • @hiepnguyen-oh5xt
    @hiepnguyen-oh5xt 2 ปีที่แล้ว +1

    mọi người ơi cho em hỏi tại sao ở chỗ onChange lại phải thêm 1 function cha bên ngoài handleCheck ạ

    • @free2idol1
      @free2idol1 2 ปีที่แล้ว +3

      vì mặc định tất cả event handler như là onclick, onchange, onblur, etc... trong JS sẽ được pass 1 argument là DOM object nên nếu giờ muốn pass 1 custom argurment vào event handler đó thì phải wrap nó vào 1 function thì mới có thể pass được.
      VD: Foo thì khi gọi hàm foo() ở ngoài thì nó sẽ là ntn:
      foo = (event) => console.log(event) //event đây chính là argument mặc định tự động được pass vào mỗi khi sự kiện click được xảy ra.
      Giờ nếu muốn pass 1 custom argument thì phải wrap nó vào 1 function cha:
      foo(name)}>Foo
      foo = (name) => console.log(name) //lúc này thì name (là 1 custom argument) mới có thể được pass vào hàm foo().

    • @hiepnguyen-oh5xt
      @hiepnguyen-oh5xt 2 ปีที่แล้ว +1

      @@free2idol1 mình cảm ơn ạ

  • @thienvu7683
    @thienvu7683 2 ปีที่แล้ว +2

    a có thể ví dụ trong trường hợp select all và deselect all được không ạ? 😂

    • @trungphanphuoc1426
      @trungphanphuoc1426 2 ปีที่แล้ว

      Select all thì push hết cái list vào, deselect all thì set lại empty thôi mà 😅

  • @pineapplesub3581
    @pineapplesub3581 2 ปีที่แล้ว +1

    Có bạn nào hiểu tại sao có cái tham số prev trong chỗ callback setChecked không mọi người. Cái prev đó ở đâu ra, khai báo ở đâu mà dùng vậy nhỉ mọi người?
    Thanks!

    • @khanhbt14
      @khanhbt14 2 ปีที่แล้ว +2

      Prev đó chính là cái state khởi tạo ban đầu, tham số đó bạn đặt tên gì cũng đc.

    • @pineapplesub3581
      @pineapplesub3581 2 ปีที่แล้ว +1

      @@khanhbt14 Mình vẫn chưa hiểu ở chỗ là tải sao đặt cái chữ 'prev' hoặc 1 tên khác vào trong setState() là nó mặc định trở thành thằng state trước đó? Ví dụ để setChecked(checked => [...checked, id]) thì mình còn hiểu, còn để prev mình chưa thể nào hiểu được.

    • @minhtran-uv4nd
      @minhtran-uv4nd 2 ปีที่แล้ว +2

      [checked, setChecked] = useState() . Thì cái tham số prev đó tương ứng với biến checked . hiểu nôm na thì prev = checked .

    • @F8VNOfficial
      @F8VNOfficial  2 ปีที่แล้ว +1

      Bạn miss bài trước hả? Với cả tên tham số đặt đúng quy ước đặt tên biến là được chứ prev hay checked trong ngữ cảnh này khác gì nhau đâu. Prev là trước đó, prevState của setChecked thì nó là giá trị trước đó của checked sau khi set state

    • @pineapplesub3581
      @pineapplesub3581 2 ปีที่แล้ว

      @@F8VNOfficial dạ em hiểu rồi ấy ah, cảm ơn anh nhiều nhé

  • @sonlengoc948
    @sonlengoc948 ปีที่แล้ว

    làm sao để lấy value của input này gắn sang input kia anh
    ví dụ em có 2 input
    khi em nhập 1 cái input, thì cái còn lại tự nhận value của cái kia

    • @F8VNOfficial
      @F8VNOfficial  ปีที่แล้ว +1

      Khi change input 1 thì em set data vào state, dùng state truyền cho prop value của input 2 em nhé

  • @nvtentertainment4098
    @nvtentertainment4098 8 หลายเดือนก่อน

    Angular JS hình như là 2 chiều Binding đúng không anh

  • @vutienle926
    @vutienle926 2 ปีที่แล้ว +1

    e thử xử lý khác a Sơn 1 tí đoạn nếu check vào phần tử đã chọn thì sẽ xóa phần tử đó ra khỏi mảng checked, lúc e console.log(checked) thì nó vẫn hiện ra mảng đã xóa phần tử check lần thứ 2, nhưng render ra HTML lại sai, và nếu check vào 1 checkbox bất kì thì nó lại hiện ra phần tử đã xóa trước đó, ai giải thích dùm e với
    Đây là hàm xử lý
    const handleChecked = (id) => {
    setChecked(prev => {
    const isChecked = prev.includes(id)
    if (isChecked) {
    // return prev.filter(item => item !== id) //đoạn này của anh Sơn thì return ra 1 mảng mới và gán mảng đó vào checked
    prev.splice(prev.indexOf(id), 1) // đoạn này e thử xóa phần tử có trong mảng
    return prev //sau đó return về mảng đã xóa phần tử
    } else {
    return [...prev, id]
    }
    })
    }

    • @hoangnguyen-rv9jg
      @hoangnguyen-rv9jg 2 ปีที่แล้ว +1

      Đoạn này mình nghĩ do bị bất đồng bộ của thằng setState. bạn dùng pre.splice nó đã thay đổi luôn giá trị cảu checked r. Sau setState lại dùng tiếp cái giá trị đã thay đổi đấy.(mình nghĩ thế ko chắc lắm nhé :v). Vẫn cần chuyên gia vào confirm

    • @hoangnguyen-rv9jg
      @hoangnguyen-rv9jg 2 ปีที่แล้ว +1

      Mình có tìm hiểu và thử lại r. Bạn dùng splice sẽ đổi cả giá trị checked và pre. Nghĩa là setState bạn truyền lại chính nó(không thay đổi giá trị tương tự setState(pre=> pre) ) nên sẽ không re-render lại khi gọi setState

    • @toannq98
      @toannq98 2 ปีที่แล้ว

      bạn return [...prev] thử xem nhé!

    • @hoangnguyen-rv9jg
      @hoangnguyen-rv9jg 2 ปีที่แล้ว

      @@toannq98 cái này là tạo 1 mảng mới. Tham trị và tham chiếu ý bạn. Spread dĩ nhiên so sánh sẽ ra 2 mảng khác nhau r

  • @thanhminh9681
    @thanhminh9681 ปีที่แล้ว

    Có ai như em không em thêm props value vào input thì không gõ được nữa.

    • @F8VNOfficial
      @F8VNOfficial  ปีที่แล้ว

      Ko gõ được vì em chưa set lại state khi onChange đó

  • @vinhtran3204
    @vinhtran3204 ปีที่แล้ว

    Anh sơn ơi tại sao phần checkbox khi em nhấn chọn 2 lần thì nó báo lỗi là Cannot read properties of undefined (reading 'includes') vậy anh

    • @hoanhm0409
      @hoanhm0409 ปีที่แล้ว

      bug này là do cái đối tượng đang gọi đến includes là undefined

  • @trungnguyenthanh5601
    @trungnguyenthanh5601 2 ปีที่แล้ว +1

    vue thì cứ v-model là xong, reactjs lằng nhằng vậy :))))

    • @top_1_florentino
      @top_1_florentino 2 ปีที่แล้ว

      vue nó extends điểm mạnh của angular + react mà ông

  • @mymy3031
    @mymy3031 6 หลายเดือนก่อน

    Mk vào trang f8 fullstack nhưng không vào học được. Có lỗi không đăng nhập được. Không biết vấn đề này có xảy ra với các bạn khác không

    • @F8VNOfficial
      @F8VNOfficial  6 หลายเดือนก่อน

      Bạn đăng nhập qua phương thức nào bạn ơi?

    • @mymy3031
      @mymy3031 6 หลายเดือนก่อน

      @ficial mk dùng email trc của mình để đăng nhập thì bị báo là "Mỗi người nên sử dụng riêng một tài khoản, tài khoản nhiều người sử dụng chung có thể sẽ bị khóa" nhg mk dùng có 1 mk à. Rồi mk đăng kí bằng cả số điện thoại lẫn email khác thì đều load rất lâu và ko vào được. Mình có console thì báo lỗi failed to load resource vs cả access to xmlhttpRequest bị block bởi CORS policy

  • @TrucNguyen-ut7pc
    @TrucNguyen-ut7pc 2 ปีที่แล้ว +2

    Chủ tịch nói sai chỗ nào thì nói lại chỗ đó thôi, hoặc cắt video khúc đó nói lại thôi chứ nói lại từ đầu mất công lắm

  • @myhanhnguyen5198
    @myhanhnguyen5198 2 ปีที่แล้ว

    setChecked((prev) => {
    const isChecked = checkedd.includes(id);
    if (isChecked) {
    //unchecked
    } else {
    return [...prev, id];
    }
    });
    anh ơi, cho em hỏi trong hàm setChecked(...), đoạn if(isChecked){....} else{ return [...prev, id];}
    em ko hiểu logic phần này, tại sao điều kiện nếu checked thì là unchecked, ngược lại thì trả về mảng chỉ bao gồm các giá trị id từ 1-3.
    ý nghĩa của biểu thức điều kiện ở đây là gì ạ? có ai có thể giải thích giúp em với ạ. em cảm ơn rất nhiều

    • @trungphanphuoc1426
      @trungphanphuoc1426 2 ปีที่แล้ว +2

      Là như này nhá, vì là checkbox nên có vụ check lại lần nữa thì uncheck nó đi.
      isChecked=checked.includes(id)
      //chổ này đặt cờ kiểm tra nếu list checked có chưa id đó thì return true
      //if kiểm tra cờ true thì thực hiện uncheck, bình thường thì nhiều người sẽ slice cái id đó ra khỏi list. Mà có cách nhanh khác nữa là filter cái list lấy ra những thằng có id khác thằng id ở param
      checked.filter(itemId=>itemId !== id)
      //chổ này nó sẽ return về cái list mới không chứa cái id đc truyền
      //nếu cờ isChecked = false
      Thì thực hiện push cái id đó vào list, nhưng mà làm gọn thì clone lại list checked rồi thêm id vào. Vì viết đúng concept react nên có prevState chứ mấy người lười thì họ return setChecked([...checked,id])

    • @myhanhnguyen5198
      @myhanhnguyen5198 2 ปีที่แล้ว +2

      @@trungphanphuoc1426 em cảm ơn anh nhiều ạ, giờ em hiểu rùi ạ chỗ này cần sửa là: nếu đặt cờ kiểm tra list checked chưa có id thì return false
      đúng ko anh?
      cờ là true: nếu như list checked chứa id trùng khi check

  • @manhdao155
    @manhdao155 ปีที่แล้ว

    chỗ map sau => sao lại là dấu () vậy ạ, em dùng {} sai phải ngồi nhìn mãi :v

    • @TanNguyen-cs4me
      @TanNguyen-cs4me ปีที่แล้ว

      Bạn xem lại Arrow Function sẽ hiểu nha. { } khi bên trong viết logic hàm callback. Còn ( ) khi bên trong chỉ viết giá trị trả về của hàm callback đó thôi. Nếu logic ko có gì quá phức tạp thì sẽ viết thẳng giá trị trả về như vậy luôn.

  • @duxng1787
    @duxng1787 2 ปีที่แล้ว +1

  • @quyenly405
    @quyenly405 ปีที่แล้ว

    Lỗi
    Uncaught (in promise ) SyntaxError: "undefined" is not valid JSON
    at JSON.parse ()
    at content_bundle.js:1:974975
    Là bị gì vậy ạ . Cứ npm start là xem trên console trình duyệt xuất hiện và cho em giải pháp biến mất 😂

    • @KunzHorus
      @KunzHorus ปีที่แล้ว

      b fix dc chua chỉ mình vs

    • @quyenly405
      @quyenly405 ปีที่แล้ว

      @@KunzHorus do trình duyệt khác chrome mới bị. Mình dùng côccoc

    • @KunzHorus
      @KunzHorus ปีที่แล้ว

      @@quyenly405 oki b

  • @hieuminh2809
    @hieuminh2809 ปีที่แล้ว

    like🥰🥰🥰🥰🥰🥰

  • @cesmorf5398
    @cesmorf5398 2 ปีที่แล้ว +1

    Chỗ checked ={ !checked.includes(course.id) } ok ?

  • @B8Official
    @B8Official 2 ปีที่แล้ว +1

    Good job