как я могу обновить состояние, чтобы присвоить значение readAsDataURL.result?

#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 hook useEffect , я отредактировал свой вопрос и привел пример, чтобы вы могли его увидеть. Проверьте это.

3. Привет @code0x00 пожалуйста, отредактируйте свой ответ, чтобы лучше отразить цель части «РЕДАКТИРОВАТЬ» и то, как это помогает задающему вопрос, чтобы, когда новые пользователи увидят ваш ответ, им было легко быстро получить помощь

4. Пожалуйста, укажите дополнительную информацию в своем ответе. Как это написано в настоящее время, трудно понять ваше решение.

5. @NoamYizraeli просто добавил больше информации, чтобы описать мой ответ.