Je suis nouveau dans React JS et je suis maintenant perplexe quant au fonctionnement des méthodes de cycle de vie des composants; ce qui est entièrement en contradiction avec les documents ReactJS.org dans mon cas. Le componentDidMount () doit s'exécuter avant render () est ce que le comportement attendu, mais render () s'exécute avant componentDidMount ().
Mon code source:
//GalleryImages.js
const galleries = [
{
src: './Farmer2.jpg',
title: 'Farmer2',
description: 'farmer2'
},
{
src: './Farmer1.jpg',
title: 'Farmer1',
description: 'farmer1'
},
{
src: './Farmer3.jpg',
title: 'Farmer3',
description: 'farmer3'
}
];
export default galleries;
import React from 'react';
import '../main.css';
//import sam from "../images/gallery/Farmer1.jpg";
import galleries from './GalleryImages.js';
class Gallery extends React.Component {
constructor(props) {
super(props);
}
cache = {};
dummy = './Farmer1.jpg';
importAll = (r, ping) => {
console.log(ping + ' called');
r.keys().forEach(key => {
this.cache[key] = r(key);
console.log(`key is ${key} and value : ${r(key)}`);
this.dummy = r(key);
});
console.log(this.cache);
};
componentDidMount() {
this.importAll(
require.context('../images/gallery/', false, /\.jpg$/),
'mount'
);
}
render() {
//this.importAll(require.context('../images/gallery/', false, /\.jpg$/),"render");
console.log(this.cache);
const gallery = galleries.map(gallery => {
return (
<a
className="spotlight"
href={gallery.src}
data-title={gallery.title}
data-description={gallery.description}
>
{console.log(this.cache[gallery.src])}
<img src={this.cache[gallery.src]} />
</a>
);
});
return (
<div className="container margintop150">
<div className="greentext center">
<h4>
{' '}
<b>Gallery</b>
</h4>
</div>
<h5 className="type_5" />
<div className="row">
<div
className="spotlight-group"
data-title="Untitled"
data-animation="fade"
data-fullscreen="false"
data-maximize="false"
data-minimize="false"
>
{gallery}
</div>
</div>
</div>
);
}
}
export default Gallery;
3 Réponses :
C'est le bon comportement, componentDidMount () est appelé après render.
Ces méthodes sont appelées dans l'ordre suivant lorsqu'une instance d'un composant est en cours de création et insérée dans le DOM:
* constructeur ()
* statique getDerivedStateFromProps ()
* rendre ()
* componentDidMount ()
Le composant obsolèteWillMount () est appelé avant.
Remarque: Ces méthodes sont considérées comme héritées et vous devez éviter les dans un nouveau code:
UNSAFE_componentWillMount ()
Vous avez mal compris le cycle de vie dans réagir JS. P>
Pour plus d'informations: Le cycle de vie du composant p> composantDidMount code> sera appelé après rendu code> est appelé à la première fois. P>
Je pense que vous confondez componentWillMount () avec componentDidMount () . componentWillMount () est appelé avant le rendu tout en appelant setState () dans componentDidMount () peut re-rendre le composant
Bienvenue dans Stack Overflow! Votre réponse pourrait mieux être rédigée sous forme de commentaire sous la question d'origine. Je pense qu'il y a peut-être déjà quelque chose de similaire. Les réponses sont réservées aux explications complètes de la question d'un utilisateur. Bon travail pour répondre cependant!
componentDidMount ()s'exécute après le premier appel derender (). Vous pouvez consulter ce diagramme pour mieux comprendre comment se déroule le cycle de viePensez-y un instant. montage DID compoent. Cela signifie qu'il DID déjà monté, ce qui signifierait que la fonction de rendu devrait s'exécuter pour être montée (vous pouvez déjà le voir dans le navigateur). Alors oui, cela devrait être après le rendu, mais uniquement sur le rendu de montage. Pas après les relances suivantes