【发布时间】:2022-01-24 09:44:57
【问题描述】:
我正在尝试使用 react 构建分解算法。 我想根据因式分解的结果将results 添加到LocalStorage。但是,LocalStorage 设置的是以前的结果而不是当前的结果。
我认为这是因为useEffect 在每个新的[number](=用户输入)上运行,而不是基于[results]。但是,我需要 useEffect 在新的用户输入提交上运行,因为那是必须触发分解的时候。
在分解完成后,我怎样才能使localStorage 设置正确的结果(如果可能,在finally 块上)?
const [results, setResults] = useState({
default: [],
detailed: [],
isPrime: '',
});
const { number } = props
useEffect(() => {
handleWorker(number);
//accessing results here will give previous results
}, [number]);
const handleWorker = number => {
try {
const worker = new Worker(new URL('facto.js', import.meta.url));
worker.postMessage({ number, algorithm });
worker.onmessage = ({ data: { facto } }) => {
setResults({ ...facto });
//the worker 'streams live' results and updates them on setResults
};
} catch(error) {
console.log(error.message)
} finally {
localStorage.setItem(number, results)
//here, results is not current state but previous one
}
};
请注意,其他一切正常
谢谢
【问题讨论】:
标签: javascript reactjs react-hooks use-effect use-state