Chào mn! Mình đang học đến useEffect() trong reactjs thì vướng phải thắc mắc này. Mong nhận được sự giải đáp từ mọi người.
Mình có 2 Component:
export default function App() {
const [show, setShow] = useState(false)
return (
<React.Fragment>
{show && <Popup />}
<button id="btn" onClick={() => setShow(!show)}>Toggle</button>
</React.Fragment>
)
}
function Popup() {
useEffect(() => {
function f(e) {
console.log(e.target)
}
document.addEventListener('click', f)
return () => {
document.removeEventListener('click', f)
}
}, [])
return (
<React.Fragment>
<h1>Popup!!!</h1>
</React.Fragment>
)
}
Theo suy nghĩ của mình thì lần render App đầu tiên, do show = false nên sẽ chỉ hiển thị duy nhất button.
Tiếp theo đó, khi click vào button thì show = true dẫn đến Popup cũng được render. Sau khi Popup render thì sẽ chạy useEffect và gắn sự kiện onClick cho document.
Tuy nhiên vấn đề mình đang gặp phải là ngay vào lần click vào button đầu tiên, khi này Popup vẫn chưa được render nên sự kiện onClick chưa được gắn, thì trong console vẫn hiện ra e.target. Mình đang không hiểu lắm cách code xử lý ở đây. Mong mn giải thích giúp.
Mình có để code ở link: https://codesandbox.io/s/dreamy-christian-1v7eip?file=/src/App.js
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?