javascript - React Hooks:为什么穷举-deps linter 规则要在依赖列表中的 useMemo 中使用本地函数?
问题描述
如果我在传递给的函数useMemo
(或其他钩子)中使用本地函数,则穷举-deps linter 规则希望本地函数位于useMemo
. 我知道每次渲染时,本地函数都是一个新实例。但是因为它从来没有真正改变过,在我看来没有必要放入依赖列表中,特别是因为我需要使用useCallback
函数(这使得代码更复杂)。
这是一个工作示例:
const [inputNumber, setInputNumber] = useState(35);
function calculateFibonacciNumber(number) {
return number < 1 ? 0 : number <= 2 ? 1
: calculateFibonacciNumber(number - 1) + calculateFibonacciNumber(number - 2);
};
const fibonacciNumber = useMemo(() => {
return calculatedFibonacciNumber = calculateFibonacciNumber(inputNumber);
}, [inputNumber]); // Here the exhaustive-deps rule wants calculateFibonacciNumber in the dependency list
那么,是否有真正的理由calculateFibonacciNumber
应该放在依赖列表中(通过useCallback
)?
解决方案
我想这背后的原因是你calculateFibonacciNumber
仍然在外面使用useMemo
.
也许您可以尝试将定义移到里面,就像这样:
const fibonacciNumber = useMemo(() => {
function calculateFibonacciNumber(number) {
return number < 1 ? 0 : number <= 2 ? 1
: calculateFibonacciNumber(number - 1) + calculateFibonacciNumber(number - 2);
};
return calculatedFibonacciNumber = calculateFibonacciNumber(inputNumber);
}, [inputNumber]);
在这种情况下,您不会看到该警告消息。
我希望这会有所帮助!
推荐阅读
- audiokit - 是否可以将输入重置为 AudioKit AKNode?
- angular - 在 Visual Studio 2017 中使用 Angular 2 设置 Angular 材质类型
- php - PHP Mail()/PHPMailer vs. Transactional Email Service vs. SMTP
- java - 使用 Java Spring MVC 提取 .rar 文件
- c# - C# SipManager Unregister 仅适用于断点
- oracle - PL/SQL“错误数量或类型的参数”和“语句被忽略”
- html - 网站的响应性在 iphone 10 或任何 iOS 中不起作用
- sql-server - 如何在 SSRS 报表生成器中设置全局变量
- java - ApachePOI getText 仅显示 docx 中的部分文本
- javascript - 有没有办法为 HTML 输入范围类型添加数千个分隔符?