我使用 React 前端制作了一个国际象棋游戏。最初,任何移动似乎都是瞬时实现的,但在添加了额外的功能(例如更改标题的背景以反映轮到谁(白色或黑色背景取决于白色的移动)和其他类似功能之后,我的应用程序明显变慢了。我怀疑是这些类型的 if 语句 -
const Details = props => {
console.log(props.status);
let [backGround, setBackGround] = useState("w details")
const history = useHistory();
if (props.status.white && backGround === "bl details"){
setBackGround("w details")
} else if (!props.status.white && backGround === "w details"){
setBackGround("bl details")
}
Run Code Online (Sandbox Code Playgroud)
这是有责任的,因为打印 props 的 console.log 每次移动都会打印它的语句 8 次(最初是两次)
我使用功能组件而不是类,我对优化的研究使我得出了以下解决方案-
React Hooks - 如何实现 shouldComponentUpdate?
如果不需要任何道具,我应该用 React.memo() 包装所有组件吗?
如何将 shouldComponentUpdate 与 React Hooks 一起使用?
所有这些都指向简单的情况,React.memo但我显然错过了一些东西,因为当我尝试实现它时,我得到的只是大量的“props”未定义错误(每次我使用很多 props 时都会出现一个错误)。
详情.jsx
import React, { useState } from 'react';
import …Run Code Online (Sandbox Code Playgroud) 代码战争的挑战在于计算你必须将 Long 的各个整数相乘多少次才能成为一位数。例如
39 -> 3 * 9 = 27 -> 2 * 7 = 14 -> 1 * 4 = 4 // 答案是 3
这是已发布的解决方案之一 -
class Persist {
public static int persistence(long n) {
int times = 0;
while (n >= 10) {
n = Long.toString(n).chars().reduce(1, (r, i) -> r * (i - '0'));
times++;
}
return times;
}
}
Run Code Online (Sandbox Code Playgroud)
我对代码的“(i - '0')”部分感到非常困惑。我昨天才知道 Java 的 chars() 方法返回一个 IntStream 表示字符,所以立即使用 reduce 对我来说很有意义。但随后它减去了一个让我失望的字符,因为它似乎适用于它正在使用字符,但是它们是如何相乘的?
我复制了上面的代码,然后删除了字符减法,所以这是我理解的一个简单的reduce语句,也就是
n = Long.toString(n).chars().reduce(1, (r, i) -> …Run Code Online (Sandbox Code Playgroud)