#javascript #reactjs
Вопрос:
Я использую крючок useState() как я могу обновить свое состояние, которое я хочу назначить readAsDataURL.result, чтобы я мог загрузить файл?
const uploadFile = event => {
let reader = new FileReader();
let file = event.target.files[0];
console.log(file); //I can see the file's info
reader.onload = event => {
console.log("event", event.target.result);
setSelectedFile(event.target.result); //its giving me null here how can i update state?
};
reader.readAsDataURL(file);
console.log("State", selectedFile);
};
Ответ №1:
Чтобы обновить состояние, все, что вам нужно, — это вызвать соответствующую функцию состояния.
Это делается для создания государства.
const [count, setCount] = useState(0);
Здесь count-это ваша переменная и функция состояния setCount, соответствующая ей.
setCount(1);
При вызове этой функции count
значение изменится на 1
. Таким образом, вы также можете обновить любое состояние, которое вы определяете.
В своем коде вы не указали код своего штата. Так что попробуйте сформулировать это, отредактировав свой вопрос.
Редактировать
В react useState крюк используется для установки состояния, которое может быть любым значением number
list
, object
и т.д. useState возвращает переменную состояния и соответствующую функцию для обновления этого состояния, и эта соответствующая функция является асинхронной функцией и не обновила состояние сразу. Чтобы проверить, было ли обновлено состояние, требуется другой хук, называемый useEffect
. хук useState будет запускаться при каждом изменении состояния.
Поэтому, например, чтобы узнать selectedFile
, было ли изменено состояние, мы можем использовать приведенный ниже код для запуска при изменении состояния выбранного файла, а затем консоли.регистрируйте значение состояния selectedFile
:
const [selectedFile, setSelectedFile] = useState(null);
useEffect(() => {
console.log(selectedFile);
}, [selectedFile]);
Комментарии:
1. const [selectedFile, setSelectedFile] = useState(null); я определил его в своем коде так, но получаю значение null при обновлении setSelectedFile(событие.цель.результат); функция чтения.onload
2.
setSelectedFile
это асинхронная функция , поэтому попробуйте использовать react hookuseEffect
, я отредактировал свой вопрос и привел пример, чтобы вы могли его увидеть. Проверьте это.3. Привет @code0x00 пожалуйста, отредактируйте свой ответ, чтобы лучше отразить цель части «РЕДАКТИРОВАТЬ» и то, как это помогает задающему вопрос, чтобы, когда новые пользователи увидят ваш ответ, им было легко быстро получить помощь
4. Пожалуйста, укажите дополнительную информацию в своем ответе. Как это написано в настоящее время, трудно понять ваше решение.
5. @NoamYizraeli просто добавил больше информации, чтобы описать мой ответ.