Mình đã thử nhưng nó không hoạt động . Ngay cả khi đã có phiên bản mới trên CH play nhưng app không hiện cập nhật . Mà phải mở CH play -> xem bản cập nhật -> vào app mới hiển thị bản cập nhật . thật khó chịu khi phải mở CH play để hiển thị cập nhật
về việc nó return null, thì khi sử dụng inline function (trong trường hợp này là lastUser), mỗi lần render nó sẽ tạo ra function lastUser mới, nên React sẽ xoá ref cũ và tạo ref mới, khiến ta thấy hành vi: "ra null rồi lại ra node". Việc này đã đc đề cập ở official doc: https://reactjs.org/docs/refs-and-the-dom.html#caveats
về việc tại sao nó lại tạo 1 function lastUser mới mà ko dùng lastUser trước đó: là vì bạn chưa cung cấp dependency list cho nó, nên dù đã bọc bởi useCallback thì nó vẫn luôn tạo ra function lastUser mới ở mỗi lần render. Vì vậy, sửa cũng khá đơn giản: ta thêm dependency cho nó, chắc sẽ như nầy :v
const lastUser = useCallback(node => {
console.log('useCallback >>>', node)
}, [users]) // => users mà ko đổi thì lastUser cũng vậy
Dựa vào đoạn code của bạn, mình đã viết thêm cách sử dụng useState để so sánh thì thấy dùng useReducer loằng ngoằng dài dòng hơn useState rất nhiều, useState chỉ mất có mất dòng code, ko hiểu useReducer nó hơn chỗ nào
var type ='coke';var drink;switch(type){case'coke':
drink ='Coke';break;case'pepsi':
drink ='Pepsi';break;default:
drink ='Unknown drink!';}
console.log(drink);// Coke
Chúng ta có thể thay thế bằng đoạn code dưới
functiongetDrink(type){return'The drink I chose was '+{'coke':'Coke','pepsi':'Pepsi','lemonade':'Lemonade'}[type];}getDrink('coke')// The drink I chose was Coke
Tại sao trong lần render() cuối cùng useCallback() của mình lại chạy vào 02 lần và có một lần log ra là null. Mình đang chưa hiểu chỗ này, bạn xem giúp mình được không ạ
THẢO LUẬN
Bài viết quá sơ sài
Khá hay ho
)
Up up up
cảm ơn anh
Em cảm ơn anh rất nhiều vì bài viết. Em tự cảm thấy em thiếu sót và thấy được con đường để trở thành comtor tốt.
@mister_n mình cũng cũng chưa thử nhưng xóa đi cài lại là cách nhanh nhất . Nhưng cảm ơn bác đã tư vấn
Thường thì search trên google những file svg bản đồ Việt Nam thì ko thấy có Hoàng Sa, Trường Sa nhỉ
Mình đã thử nhưng nó không hoạt động . Ngay cả khi đã có phiên bản mới trên CH play nhưng app không hiện cập nhật . Mà phải mở CH play -> xem bản cập nhật -> vào app mới hiển thị bản cập nhật . thật khó chịu khi phải mở CH play để hiển thị cập nhật
hay quá, mình cũng đang tìm hiểu về cái này
Bai viet rat bo ich
@trunk
xem sao =))
@thanh_tuan
về việc nó return null, thì khi sử dụng inline function (trong trường hợp này là lastUser), mỗi lần render nó sẽ tạo ra function lastUser mới, nên React sẽ xoá ref cũ và tạo ref mới, khiến ta thấy hành vi: "ra null rồi lại ra node". Việc này đã đc đề cập ở official doc: https://reactjs.org/docs/refs-and-the-dom.html#caveats
về việc tại sao nó lại tạo 1 function lastUser mới mà ko dùng lastUser trước đó: là vì bạn chưa cung cấp dependency list cho nó, nên dù đã bọc bởi useCallback thì nó vẫn luôn tạo ra function lastUser mới ở mỗi lần render. Vì vậy, sửa cũng khá đơn giản: ta thêm dependency cho nó, chắc sẽ như nầy :v
Dựa vào đoạn code của bạn, mình đã viết thêm cách sử dụng useState để so sánh thì thấy dùng useReducer loằng ngoằng dài dòng hơn useState rất nhiều, useState chỉ mất có mất dòng code, ko hiểu useReducer nó hơn chỗ nào
Chào bạn, mình đưa 1 ví dụ bạn tham khảo nhé:
Thay vì cú pháp longhand như sau:
Chúng ta có thể thay thế bằng đoạn code dưới
cho mình hỏi khi mà bài nhạc chạy hết mình muốn nó tự chuyển sang bài tiếp theo thì phải làm sao ạ
Dạ vâng anh @lequynam93, hợp lý quá ạ 😃
Em cảm ơn anh đã góp ý để hoàn thiện bài viết tốt hơn ạ ^^
Cảm ơn @thiewd2000 đã ủng hộ nha ^^
@hwng bạn ơi, bạn xem giúp mình chỗ này được không:
https://codesandbox.io/s/usestate-load-more-3d5cg
Tại sao trong lần
render()cuối cùnguseCallback()của mình lại chạy vào 02 lần và có một lần log ra lànull. Mình đang chưa hiểu chỗ này, bạn xem giúp mình được không ạ