Yêu cầu Sep 3rd, 2021 10:37 a.m. 187 0 3
  • 187 0 3
0

Khác nhau giữa class component và function component

Chia sẻ
  • 187 0 3

với cùng state như nhau, mình muốn xem state đã thay đổi như thế nào sau khi setstate, nhưng tại sao có sự khác nhau giữa class component và function component sau khi setstate với syntax như nhau vậy mọi người.

3 CÂU TRẢ LỜI


Đã trả lời Sep 4th, 2021 3:49 a.m.
Đã được chấp nhận
+1

với class component khi bạn gọi setState bạn có thể update từng trường trong state, còn với hook thì khi bạn gọi setUser là nó sẽ thay thế cả data cũ của bạn nhé

Chia sẻ
Avatar tapcode @tapcode
Sep 4th, 2021 10:00 a.m.

giải thích rõ hơn tí dx hk bn ơi, ko thì có thể gửi dùm mình document để mình tìm hiểu. Thanks bn.

Avatar Khang @khangnd
Sep 6th, 2021 1:53 a.m.

@tapcode Giải thích dễ hiểu vậy mà...

// this.setState
state = { ...oldState, ...newState }

// setUser
state = { ...newState }
Đã trả lời Sep 7th, 2021 4:22 a.m.
+2

hi @tapcode

Với Class Component

  • thuộc tính state sẽ đại diện cho toàn bộ trạng thái của Class
  • khi gọi hàm setState, nếu bạn update thuộc tính nào thì chỉ update lại cho thuộc tính đó, như trong vd của bạn gọi this.setState chỉ set lại cho name thì age sẽ không đổi

Với Function Component

  • useState được gọi là hook của React, bạn xem thêm ở đây https://reactjs.org/docs/hooks-reference.html#usestate
  • hook này sẽ trả về cho bạn một biến giá trị và một hàm để update lại giá của nó và render lại trên view
  • Về bản chất thì nó chỉ là một variable có thể lưu string, number hay object. Trường hợp của bạn là lưu object với giá trị là {name: 'a', age: 20}. khi bạn gọi setUser với object chỉ có name thì nó sẽ override lại object cũ
  • Bạn có thể tạo nhiều state bằng cách gọi hook này nhiều lần như sau
     const [user, setUser] = useState({name: 'a', age: ''})
     const [loading, setLoading] = useState(false)
     const [countClick, setCountClick] = useState(0)
    
    Thì trên view sẽ là
    <div>
      {loading && (<div>Loading....</div>)}
     <div>{countClick}</div>
    </div>
    

Hope this help ^^!

Chia sẻ
Đã trả lời Sep 4th, 2021 6:06 p.m.
0

state.user != state

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí