我有两个组件,父组件(App
)显示了一个按钮,该按钮在被单击时有条件地呈现Child
组件.
Here是Sandbox .
App.js
import { useState } from "react";
import Child from "./Child";
function App() {
const [value, setValue] = useState(false);
return (
<div>
<button onClick={() => setValue(true)}>Mount Child</button>
{value ? <Child /> : null}
</div>
);
}
export default App;
Child.js
import React, { useEffect } from "react";
function Child() {
const handleClick = () => {
console.log("hi");
};
useEffect(() => {
document.addEventListener("click", handleClick);
return () => {
document.removeEventListener("click", handleClick);
console.log("unmounting");
};
});
return <div>Child</div>;
}
export default Child;
为什么这里添加的document.addEventListener("click", handleClick)
事件在登上Child
时会被解雇?
这是点击按钮后的控制台:
unmounting
hi
在React.StrictMode
组件中运行unmounting
是可以理解的,但我不知道为什么"hi"
会被记录下来.