Yêu cầu thg 4 18, 2020 10:53 SA 117 0 1
  • 117 0 1
0

Lifecycle component trong react

Chia sẻ
  • 117 0 1

Mình đang làm Website rạp chiếu phim bằng Reactjs , và bị stuck ở phần lifecycle, mọi người cho mình hỏi ? :

  1. Sau khi setState thì mình call Api ở lifecycle nào để lấy được props mới ,xong render ra ạ?? (ở code bên dưới mình để ngay trên setState, thấy chuối quá...)

  2. Mình muốn lấy 1 obj đầu tiên trong một mảng được trả về từ Api, để render ra trước (làm dữ liệu mặc định), thì mình setState ở lifecycle nào ạ??

Mình xin cảm ơn...

//hàm setState của mình 

      ChangeCinema(cinema) {   // thay đổi thông tin của Rạp sau khi user Click
       
        this.props.layThongTinCumRapTheoHeThong(cinema.maHeThongRap);// call Api với para là mã hệ thống rạp 
        // ex : cinema.maHeThongRap = "CGV"
        // data = [ {CGV-Quan1} , {CGV-Quan2}, {CGV-Quan3}]
        this.setState({
            cinema: {
                maHeThongRap: cinema.maHeThongRap,
                logo: cinema.logo,
            }
        })

    }

1 CÂU TRẢ LỜI


Đã trả lời thg 4 19, 2020 2:22 SA
+3

Câu 1:

Bạn có thể dùng theo 2 cách như sau:

  1. Nếu bạn đang dùng class component thì gọi API ở componentDidUpdate, hook này sẽ được gọi ngay sau khi bạn setState cho `cinema.maHeThongRap``. Demo:
componentDidUpdate(prevProps, prevState) {
  if (prevState.maHeThongRap !== this.state.maHeThongRap) {
    // gọi API ở đây
  }
}
  1. Nếu bạn đang dùng functional component thì gọi API ở useEffect với dependency là cinema.maHeThongRap, hook này cũng sẽ được gọi ngay khi cinema.maHeThongRap thay đổi . Demo:
useEffect(() {
  // gọi API ở đây
}, [cinema.maHeThongRap])

Câu 2

  • Class component: Bạn có thể làm ở UNSAFE_componentWillMount() để đảm bảo dữ liệu được render càng sớm càng tốt khi component đc mount, hoặc ko thì làm ở componentDidmount cũng được (hook này sẽ được gọi sau UNSAFE_componentWillMount 1 chút)

  • Functional component: bạn gọi ở useEffect với dependency là mảng rỗng nhé. Demo:

useEffect(() {
// gọi API ở đây
},[]) // ko có dependency nên cả khối useEffect này chỉ đc chạy 1 lần, phù hợp cho việc khởi tạo dữ liệu (tương tự componentDidmount)
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í