Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refacto: useCallback + encapsulation of map instantiation #4

Merged
merged 4 commits into from
Feb 28, 2023

Conversation

garronej
Copy link
Collaborator

No description provided.

// C'est beaucoup mieux de renvoyer des fonctions dont la référence ne change pas a chaque render
// ça évite des re-render inutile downstream.
// voir: https://docs.onyxia.sh/contributing/onyxia/dependencies#avoiding-useless-re-render-of-components
const setNewCenterAndNewZoom = useConstCallback((coordinates: [number, number], zoom: number) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Carrément pour les callback 💯
Je vais utiliser les listes vides en tant que deps, et éviter d'installer une nouvelle lib pour le moment

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING WARNING WARNING:
Ce n'es pas du tout la même chose d'utilise useCallback avec une liste de dependence vide et d'utiliser useConstCallback!
Je t'enjoint a étudier attentivement cette exemple, il est fondamentale pour une bonne compréhention de React:
https://stackblitz.com/edit/react-ts-fyrwng?file=index.tsx

Si tu ne veut pas inclure une nouvelle dep, je comprend, mais sache que que useConstCallback va bientôt faire son apparition dans React sous l'appélation useEvent:
reactjs/rfcs#220

Si tu ne veut pas dépendre de powerhooks tu peut copier coller le code du hook:
https://github.com/garronej/powerhooks/blob/main/src/useConstCallback.tsx

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si tu utilise une liste de dépendence vide dans useCallback, la première view est capturé et jamais mise a jour. Si tu met la view dans le tableau des dépendence, la référence de ta fonction va changer a chaque fois que la view est updater.

Avec useConstCallback tu as toujours la même rérérence de fonction ET en même temps c'est toujours la derinère la view la plus frèche qui est utiliser au moment de l'execution de la fonction.

@maximallain maximallain changed the title Code review refacto: useCallback + encapsulation of map instantiation Feb 28, 2023
Copy link
Contributor

@maximallain maximallain left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plus sécure et plus performant, top !

@maximallain maximallain merged commit 0d11679 into ma/kill-css Feb 28, 2023
@@ -22,7 +24,9 @@ const LAYER_TO_OPENLAYER_LAYER: { [key in AvailableLayer]: BaseLayer } = {
"aiPrediction": aiPredictionLayer,
};

const useStyles = makeStyles()(theme => ({
const lightTheme = fr.getColors(false);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Le fond de carte ne change jamais donc utilise le light theme

"The map object should have been instantiated (it is after fist render) by the time this function is called",
);

map.addLayer(layer);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Là du coup grâce au assert tu n'a plus besoin du point d'intérogation

// C'est beaucoup mieux de renvoyer des fonctions dont la référence ne change pas a chaque render
// ça évite des re-render inutile downstream.
// voir: https://docs.onyxia.sh/contributing/onyxia/dependencies#avoiding-useless-re-render-of-components
const setNewCenterAndNewZoom = useConstCallback((coordinates: [number, number], zoom: number) => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING WARNING WARNING:
Ce n'es pas du tout la même chose d'utilise useCallback avec une liste de dependence vide et d'utiliser useConstCallback!
Je t'enjoint a étudier attentivement cette exemple, il est fondamentale pour une bonne compréhention de React:
https://stackblitz.com/edit/react-ts-fyrwng?file=index.tsx

Si tu ne veut pas inclure une nouvelle dep, je comprend, mais sache que que useConstCallback va bientôt faire son apparition dans React sous l'appélation useEvent:
reactjs/rfcs#220

Si tu ne veut pas dépendre de powerhooks tu peut copier coller le code du hook:
https://github.com/garronej/powerhooks/blob/main/src/useConstCallback.tsx

// C'est beaucoup mieux de renvoyer des fonctions dont la référence ne change pas a chaque render
// ça évite des re-render inutile downstream.
// voir: https://docs.onyxia.sh/contributing/onyxia/dependencies#avoiding-useless-re-render-of-components
const setNewCenterAndNewZoom = useConstCallback((coordinates: [number, number], zoom: number) => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si tu utilise une liste de dépendence vide dans useCallback, la première view est capturé et jamais mise a jour. Si tu met la view dans le tableau des dépendence, la référence de ta fonction va changer a chaque fois que la view est updater.

Avec useConstCallback tu as toujours la même rérérence de fonction ET en même temps c'est toujours la derinère la view la plus frèche qui est utiliser au moment de l'execution de la fonction.

@maximallain maximallain deleted the code-review branch March 29, 2023 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants