Мне показалось, что я завязал затвор в крючках.Тем не менее, я борюсь с этим.Код ниже - очень упрощенная версия моего реального кода для демонстрации.На самом деле clickHandler()
и upload()
гораздо сложнее.Вот почему нельзя объединить их в одну функцию.Проблема в том, что я не могу получить доступ к обновленному массиву файлов из состояния функции загрузки.Если я использую ссылку для массива, он работает, однако, я думаю, что это антипаттерн.Я также попытался объявить состояние вне компонента, который не работал.Спасибо за вашу помощь.
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;