【发布时间】:2019-10-29 19:10:03
【问题描述】:
我以为我对钩子中的闭包有所了解。但是,我正在努力解决这个问题。下面的代码是我实际演示代码的一个非常简化的版本。实际上,clickHandler() 和 upload() 要复杂得多。这就是为什么不能将它们组合成一个功能的原因。问题是我无法从上传功能中的状态访问更新的文件数组。但是,如果我对数组使用 ref 它可以工作,我认为这是一种反模式。我还尝试在组件外部声明状态,但没有成功。感谢您的帮助。
import React, { useCallback, useState } from 'react';
const HomeScreen = () => {
const initialState = {
error: false,
files: [],
totalSize: 0,
finished: false
};
const [state, setState] = useState(initialState);
const upload = useCallback(() => {
// At this point state.files is an empty array
console.log(state.files);
}, [state]);
const clickHandler = useCallback(() => {
const queue = [
{ id: 1, bool: false },
{ id: 2, bool: false }
];
setState((state) => {
return { ...state, files: queue }
});
upload()
}, [upload]);
return <button onClick={clickHandler}>Click me</button>;
};
export default HomeScreen;
【问题讨论】:
标签: javascript reactjs closures react-hooks