Dans mon application react, je souhaite utiliser des utilitaires. J'ai vu 2 approches différentes. La première consiste simplement à créer la fonction et à l'exporter. La deuxième est la création d'une classe Util et l'exportation d'un objet afin qu'il ne puisse pas être instancié (classe statique).
export default redirectIfAuthenticated = (isAuthenticated, history, screen) => {
if (isAuthenticated)
history.push(screen);
}
VS
class Util {
redirectIfAuthenticated = (isAuthenticated, history, screen) => {
if (isAuthenticated)
history.push(screen);
}
}
export default new Util();
Quelle est la meilleure approche ici et pourquoi?
5 Réponses :
Vous pouvez le faire dans les deux sens, mais créer une classe util et définir toutes vos fonctions est une manière standard de le faire. Par exemple:
class Util {
redirectIfAuthenticated = (isAuthenticated, history, screen) => {
if (isAuthenticated)
history.push(screen);
}
anotherFunction = () => {
// your code
}
export default Util;
Vous pouvez donc définir ici plusieurs fonctions et importer ces fonctions depuis la classe util pour les utiliser n'importe où.
La classe peut être utilisée lorsqu'elle a des fonctions étroitement liées les unes aux autres. Si vos fonctions utils ne sont pas liées les unes aux autres, vous pouvez utiliser la deuxième approche. Je recommanderais d'utiliser la deuxième approche car les fonctions util ne sont généralement pas liées entre elles. Les fonctions util sont développées pour pouvoir être réutilisées dans d'autres composants.
L'utilisation de fonctions séparées est généralement la méthode préférée en raison du tremblement de l'arbre.
La secousse d'arbre est le processus de suppression des importations inutilisées par votre outil de construction (par exemple, Webpack) afin de minimiser votre code. Les classes sont beaucoup plus difficiles à réduire pour ces outils, c'est donc quelque chose à considérer.
Les classes Singleton sont souvent considérées comme des antipatterns. Util est un anti-modèle dans ce cas. Une classe est utilisée comme espace de noms, tandis que les modules sont déjà là pour fournir des espaces de noms.
L'utilisation de l'exportation par défaut pour plusieurs exportations les empêchera d'être transformées en arborescence.
export default redirectIfAuthenticated = ... est une erreur, il en résulte la création de la variable globale redirectIfAuthenticated en mode lâche et en erreur en mode strict.
Au cas où il ne devrait y en avoir qu'une export, l'exportation par défaut peut être utilisée:
export const redirectIfAuthenticated = (isAuthenticated, history, screen) => { ... };
Dans le cas où il peut y avoir plusieurs exportations (même s'il n'y en a actuellement qu'une), les exportations nommées peuvent être utilisées:
export default (isAuthenticated, history, screen) => { ... };
Je pense qu'en général, c'est quelque chose que les gens qui passent à JavaScript à partir d'autres langues frappent lorsqu'ils commencent à travailler. Tout n'a pas besoin (ou ne devrait pas être) d'une classe, et vous passerez un meilleur moment lorsque vous commencerez à coder de cette façon.
De plus, si vous voulez juste que vos importations soient belles, si vous transpilez, vous pouvez généralement créer des alias pour vos chemins.
Vous aurez peut-être plus de chance de publier ceci sur Révision du code .