gpt4 book ai didi

javascript - 这是检测 react 组件中第一次渲染的正确方法

转载 作者:行者123 更新时间:2023-12-05 00:25:59 25 4
gpt4 key购买 nike

我有一个场景,我需要检测组件的第一次渲染。这里我建立了一个小例子。有人可以向我解释正确的方法是什么吗?
为什么大多数人建议使用 ref而不是普通的状态。
https://codesandbox.io/s/condescending-burnell-0ex3x?file=/src/App.js

import React, { useState, useRef, useEffect } from "react";
import "./styles.css";

export default function App() {
const firstRender = useDetectFirstRender();
const [random, setRandom] = useState("123");
useEffect(() => {
if (firstRender) {
console.log("first");
} else {
console.log("second");
}
}, [random]);
return (
<div className="App">
<h1>Random Number is {random}</h1>
<button onClick={() => setRandom(Math.random())}>Change Name</button>
</div>
);
}

//Approach 1
// export function useDetectFirstRender() {
// const firstRender = useRef(true);

// useEffect(() => {
// firstRender.current = false;
// }, []);

// return firstRender.current;
// }

//Approach 2
export function useDetectFirstRender() {
const [firstRender, setFirstRender] = useState(true);

useEffect(() => {
setFirstRender(false);
}, []);

return firstRender;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

最佳答案

您可以创建一个可重复使用的 custom hook为此,基于 useRef .

function useFirstRender() {
const ref = useRef(true);
const firstRender = ref.current;
ref.current = false;
return firstRender;
}

关于javascript - 这是检测 react 组件中第一次渲染的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65027884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com