Utilisation de variables chargées via des requêtes API dans useEffect() dans un conteneur React
En gros, j'ai une requête API dans useEffect() donc elle charge tous les "carnets" avant le chargement de la page afin que je puisse les afficher.
useEffect(() => {
getIdToken().then((idToken) => {
const data = getAllNotebooks(idToken);
const jsonData = JSON.stringify(data, null, 2);
notebooks = JSON.parse(jsonData) as [Notebook, Withdraw[]][];
});
}
Comment utiliser cette liste de notebooks dans mon code pour pouvoir l'utiliser dans des balises ?
Je suis débutant en React, donc je n'ai pas fait grand-chose d'autre que d'appeler des fonctions dans useEffect().
Mise à jour : Comme demandé, voici la fonction principale de getAllNotebooks, son cas d'utilisation et la fonction appelée en interne par useEffect() :
withdraw_repository_http
async getAllNotebooks(idToken: string): Promise<[Notebook, Withdraw[]][]> {
var notebooks: [Notebook, Withdraw[]][] = [[new Notebook({numSerie : '34000', isActive: false}), [new Withdraw({numSerie : '34000', email: 'erro@maua.br', withdrawTime: Date.now(), finishTime: null})]]];
try {
const url = process.env.NEXT_PUBLIC_API_URL + '/get-all-notebooks';
const { data, status} = await axios.get<[Notebook, Withdraw[]][]>(url, {headers : {'Authorization' : `Bearer ${idToken}'`}});
console.log('response status is', status);
if (status === 200) {
// console.log('response data is', data);
const jsondata = JSON.stringify(data, null, 2);
notebooks = JSON.parse(jsondata).notebooks as [Notebook, Withdraw[]][];
console.log('notebooks is', notebooks);
return notebooks;
}
else {
console.log('response data is', data);
}
}
catch (error) {
if (axios.isAxiosError(error)) {
console.log('error response is', error);
} else {
console.log('unknown error');
console.log(error);
}
}
return notebooks;
}
get_all_notebooks_usecase
import { IWithdrawRepository } from '../domain/repositories/withdraw_repository_interface';
export class GetAllNotebooksUsecase {
constructor(private withdrawRepo: IWithdrawRepository) {}
async execute(idToken: string) {
const withdraws = await this.withdrawRepo.getAllNotebooks(idToken);
return withdraws;
}
}
withdraw_provider
async function getAllNotebooks(idToken: string){
try {
const notebooks = await getAllNotebooksUsecase.execute(idToken);
setNotebooks(notebooks);
return notebooks;
}
catch (error: any) {
console.log(`ERROR PROVIDER: ${error}`);
const setError = error;
setError(setError);
return [];
}
} 1 réponse
const [notebooks, setNotebooks] = useState([]); // initialize notebooks with empty array
useEffect(() => {
getIdToken().then((idToken) => {
const data = getAllNotebooks(idToken);
// I think you don't need this line
// const jsonData = JSON.stringify(data, null, 2);
setNotebooks(data);
});
},[]); // empty brackets here means: useEffect executes only once on load component
// render notebooks using JSX (xml inside javascript)
return {notebooks.map((notebook, index) => {
<div>
<h1>My notebook number {index}</h1>
<h3>This noteboot's name is: {notebook.name}</h3>
etc..
</div>
})};
J'espère que cela vous aidera, si vous avez des questions, n'hésitez pas à y répondre.
Outils chauds Tags
Hot Questions
Hot Tools
Collection de bibliothèques d'exécution vc9-vc14 (32 + 64 bits) (lien ci-dessous)
Téléchargez la collection de bibliothèques d'exécution requises pour l'installation de phpStudy
VC9 32 bits
Bibliothèque d'exécution de l'environnement d'installation intégré VC9 32 bits phpstudy
Version complète de la boîte à outils du programmeur PHP
Programmer Toolbox v1.0 Environnement intégré PHP
VC11 32 bits
Bibliothèque d'exécution de l'environnement d'installation intégré VC11 phpstudy 32 bits
SublimeText3 version chinoise
Version chinoise, très simple à utiliser
Sujets chauds





