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 ạ
Hi bạn, đối với hàm "driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);" là câu lệnh để browser sẽ phải chờ 10s trước khi bắn ra Exeption, trong 10s thì nếu element của bạn chưa load trong DOM thì sẽ bắn ra exeption.
Còn với Explicit Wait thì sẽ giúp bạn đợi 1 element theo 1 điều kiện nào đó, tùy vào trường hợp sẽ sử dụng bạn nhé
Hiện tại mình ko thấy được kịch bản code của bạn là gì nên chưa thể giúp bạn được. Thân
THẢO LUẬN
@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 ạHay
Bạn có thể viết
cases[something]()để chạy hàm luôn thay vì dùngswitch. Nhược điểm làdefaultsẽ không hoặc động.Hi bạn, đối với hàm "driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);" là câu lệnh để browser sẽ phải chờ 10s trước khi bắn ra Exeption, trong 10s thì nếu element của bạn chưa load trong DOM thì sẽ bắn ra exeption. Còn với Explicit Wait thì sẽ giúp bạn đợi 1 element theo 1 điều kiện nào đó, tùy vào trường hợp sẽ sử dụng bạn nhé Hiện tại mình ko thấy được kịch bản code của bạn là gì nên chưa thể giúp bạn được. Thân
Bài viết rất dễ hiểu. Cảm ơn bạn!
Em cam on nha.
Cám ơn @tienthegainz , từ giờ chi ít thì e cũng đã có ý thức về việc này rồi
sau này cố gắng thì chắc chắn sẽ thực hiện được thôi.
chất
tró
thanks anh
Viết hay quá chị !
Thôi bạn ơi, mình không dám múa trước mặt bạn