#reactjs #expo #es6-promise
#reactjs #выставка #es6-обещание
Вопрос:
Я в большой борьбе. Я пытаюсь передать данные в useState из sendID, потому что мне нужно, чтобы они передавались в реквизиты моего компонента Exposition, но не были определены.
Я не могу вернуть его, потому что он возвращает обещание.
import React, { useState, useEffect } from "react";
import DataService from "../services/Services";
import * as SecureStore from 'expo-secure-store';
import Expositions from "./Expositions";
const Authenticate = () => {
const[code, setCode] = useState();
SecureStore.getItemAsync("device_id").then((response) => {
console.log("stored id : " response);
sendId({"id" : response});
}
);
function sendId(deviceId){
console.log("object id send to api : " JSON.stringify(deviceId));
DataService.getInfo(JSON.stringify(deviceId))
.then((response) => {
SecureStore.setItemAsync("device_id", response.id);
console.log("id from api : " response.id);
console.log(response.response);
console.log("here");
setCode({"id" : 3}); //does'nt work
})
.catch((e) => {
console.log(e);
});
}
//SecureStore.deleteItemAsync("device_id").then((reject) => {
//});
console.log("Data :" JSON.stringify(code)); //undefined
return (
<Expositions infections={code}/> //undefined
);
};
export default Authenticate;
Комментарии:
1.
sendId
иgetId
не являются компонентами и не являются пользовательскими крючками, они не могут использоватьuseState
hook. Исправьте это, затем определите некоторое допустимое начальное состояние и поместите служебные функции вuseEffect
хук с надлежащей зависимостью, чтобы они не вызывались каждый цикл рендеринга. Вашиasync
функции ничего неawait
делают, поэтому их не нужно объявлятьasync
. Условный рендерингExpositions
или обеспечениеExpositions
могут обрабатывать обновленные реквизиты.
Ответ №1:
Внутри ваших асинхронных функций используйте оператор await и не используйте .then
для обещаний, таких как SecureStore.getItemAsync
and DataService.getInfo
. Если вы не используете await, эти функции вернут значение до завершения выполнения обещания.