我已經閱讀了散列迭代,雖然這不是關于安全性的問題,但我似乎無法找到有關如何正確執行此操作的資訊。
我認為在 React 中,這應該用 來完成useState,但我顯然在這里遺漏了一些東西。
完整代碼:
import { sha256 } from "js-sha256";
import { useState } from "react";
function App() {
const [currentHash, setCurrentHash] = useState("summer1");
function iterate(iterations) {
for (let x = 0; x < iterations; x ) {
setCurrentHash(sha256(currentHash)); //Does 1 hash only
console.log("Hashed", x, "times"); //Logs 4 times
}
}
return (
<div className="App">
<button onClick={() => iterate(4)}> Klick</button>
currentHash: {currentHash}
{/* Correct hashes */}
<p>0: summer1</p>
<p>1: {sha256("summer1")}</p>
<p>2: {sha256(sha256("summer1"))}</p>
<p>3: {sha256(sha256(sha256("summer1")))}</p>
<p>4: {sha256(sha256(sha256(sha256("summer1"))))}</p>
</div>
);
}
export default App;
uj5u.com熱心網友回復:
sha256(currentHash) 無論您運行多少次,它都會為您提供相同的結果。
currentHash在重新渲染組件并且從狀態中拉出新值并分配給currentHash函式頂部的新實體之前,不會更新。
你需要:
- 將結果存盤在一個變數中——而不是狀態
- 使用該變數的值作為函式的輸入
- 將最終結果存盤在最后的狀態中
uj5u.com熱心網友回復:
作業代碼:
import { sha256 } from "js-sha256";
import { useState } from "react";
function App() {
const [currentHash, setCurrentHash] = useState("");
function iterate(input, iterations) {
for (let x = 0; x < iterations; x ) {
input = sha256(input);
console.log("Hashed", x, "times");
}
setCurrentHash(input)
}
return (
<div className="App">
<button onClick={() => iterate("summer1", 2)}> Klick</button>
currentHash: {currentHash}
</div>
);
}
export default App;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375109.html
標籤:javascript 反应 递归
上一篇:考慮在樹中發生了多少次遞回
下一篇:如何將此方法轉換為遞回?
