【发布时间】:2019-04-20 10:45:45
【问题描述】:
如何在useEffect 钩子中跳过第一次运行。
useEffect(() => {
const first = // ???
if (first) {
// skip
} else {
// run main code
}
}, [id]);
【问题讨论】:
标签: reactjs react-hooks
如何在useEffect 钩子中跳过第一次运行。
useEffect(() => {
const first = // ???
if (first) {
// skip
} else {
// run main code
}
}, [id]);
【问题讨论】:
标签: reactjs react-hooks
useRef hook can be used to store any mutable value,因此您可以存储一个布尔值,指示它是否是第一次运行效果。
示例
const { useState, useRef, useEffect } = React;
function MyComponent() {
const [count, setCount] = useState(0);
const isFirstRun = useRef(true);
useEffect (() => {
if (isFirstRun.current) {
isFirstRun.current = false;
return;
}
console.log("Effect was run");
});
return (
<div>
<p>Clicked {count} times</p>
<button
onClick={() => {
setCount(count + 1);
}}
>
Click Me
</button>
</div>
);
}
ReactDOM.render(
<MyComponent/>,
document.getElementById("app")
);
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id="app"></div>
【讨论】:
const [isFirstRun, setFirstRun] = useState(true); 并在第一次运行效果时使用 setFirstRun 会导致重新渲染,这可能不是您想要的。