javascript - 防止自定义挂钩在每次重新渲染时重新初始化
问题描述
import React, { useState } from "react";
import useInterval from "use-interval";
const useOwnHook = () => {
const arr = [...Array(100)].map((_, index) => index);
return {
arr
};
};
const Component = ({ count }) => {
const { arr } = useOwnHook();
console.log(arr, "arr");
return (
<div className="App">
<h1>{count + 1}</h1>
</div>
);
};
export default function App() {
const [count, setCount] = useState(0);
useInterval(() => {
setCount(count + 1);
}, 1000);
return <Component count={count} />;
}
我创建了一个钩子useOwnHook
来演示每次Component
重新渲染,每次它进入 insiteuseOwnHook
并创建新数组,是否可以防止它在每次重新渲染时移动到这个钩子内?
解决方案
就个人而言,我会使用带有 init 函数的状态变量:
const useOwnHook = () => {
const [arr] = useState(() => [...Array(100)].map((_, index) => index));
return {
arr
};
};
init 函数的好处是它是惰性求值的,因此您不会在每次渲染组件时都构造数组。
推荐阅读
- java - 从 Logback 中的 java 类中读取值
- c++ - 具有可变参数模板成员函数的类的依赖注入
- websphere - 无法在 RAD 中启动 websphere 应用程序服务器 8.5
- angular - 测试角小吃吧
- c# - 无法使用错误代码 ORA-00933 更新 Oracle 数据库:SQL 命令未正确结束
- node.js - NodeJS:尝试使用“listBlobsFlat”列出 Blob 时,带有“serviceBusTrigger”的 Azure 函数会给出“InvalidResourceName”错误
- c++ - 是否可以使用 cmake 为没有 pod 的 Xcode 11 链接 xcframework (FirebaseCore.xcframework)?我找不到例子
- python - 在 Windows 上安装 Petsc
- c++ - std::vector<>.size() 抛出异常
- sorting - vuesax表格组件数据如何默认降序排序?