0
votes

window.addeventlistener ('Charger', fonction) ne fonctionne pas dans React (Gatsby)

Je suis en difficulté avec Scrolling Parallaxe Scroll de Scroll. Lorsque la page Initial Scroll n'est pas au sommet sur la charge. Im utilise une bibliothèque de réact-Scroll-parallaxe ( https://www.npmjs.com/package / React-Scroll-Parallaxe ). Pour résoudre mon problème, j'essaie d'utiliser leur suggestion d'ici https://www.npmjs.com/package/react-scroll-parallax#example-usage-of-context .

import { useEffect } from 'react';
import { useController } from 'react-scroll-parallax';

const ParallaxCache = () => {
  const { parallaxController } = useController();
  useEffect(() => {
    const handler = () => {
      parallaxController.update();
      console.log(1);
    };
    window.addEventListener('load', handler);
    return () => document.removeEventListener('load', handler);
  }, [parallaxController]);

  return null;
};

export default ParallaxCache;


0 commentaires

5 Réponses :


-1
votes

Je pense que vous devez utiliser l'une des méthodes de cycle de vie si vous utilisez un composant basé sur la classe telle que la méthode ComponentDidMount.

componentDidMount() {
   window.addEventListener('resize', this.handleResize)
}


0 commentaires

1
votes

Il est très probable que votre fenêtre ait déjà tiré l'événement charger pendant que votre composant est istéantied.


0 commentaires

1
votes

S'il s'agit de l'événement code> code> qui ne fonctionne pas, il est possible que la page soit déjà chargée lorsque ce code est en cours d'exécution. Essayez d'ajouter une instruction IF pour vérifier si le document est déjà chargé.

import { useEffect } from 'react';
import { useController } from 'react-scroll-parallax';

const ParallaxCache = () => {
  const { parallaxController } = useController();
  useEffect(() => {
    const handler = () => {
      parallaxController.update();
      console.log(1);
    };

    if (document.readyState === "complete") {
      handler();
    } else {
      window.addEventListener('load', handler);
      return () => document.removeEventListener('load', handler);
    }
  }, [parallaxController]);

  return null;
};

export default ParallaxCache;


0 commentaires

1
votes

Le crochet d'UseEffect n'est pas approprié dans cette situation, vous devez donc utiliser un crochet d'ustelayoutEffect. S'il vous plaît vérifier cette référence. https://www.npmjs.com/package/ React-Scroll-Parallaxe # Exemple-utilisation-de-context Vous avez utilisé UseEffect Crochet Mais dans cet exemple, ils ont utilisé USAYAYOUTEffect Crochet. S'il vous plaît faire référence à cette référence. https://kentcdodds.com/blog/useeffect-vs-uselayouteffet Xxx


1 commentaires

Merci pour la réponse, la fonction fonctionne maintenant, mais cela ne résout toujours pas mon problème que Parallax est bloqué. Il semble que la mise à jour () ne fonctionne pas. Des idées?



0
votes
if (document.readyState === "complete") {
  handler();
} else {
  window.addEventListener('load', handler);
  return () => document.removeEventListener('load', handler);
}
This will cause intermittent issue, due to script not fully loaded.

0 commentaires