J'ai ce code simplifié, assez simple: mais je l'ai trouvé assez lisible. Quelqu'un a une idée de savoir comment refactoriser ce code n'utilisant pas si code> ou
ou
ou
laisse code> ou opérateur ternaire imbriqué ou imbriqué? P> p>
3 Réponses :
Pour faciliter la lecture, vous pouvez profiter de évaluation de court-circuit < / a> avec && code> et
|| code>. Pour rendre les choses plus propres et plus faciles à tester, j'aime aussi créer des fonctions vraiment petites qui ne font qu'une seule chose, mais faites-le bien. Il évite de mélanger la logique (quel chemin à choisir) em> et fonctionnalité (construire ces chemins) em>:
parfois juste le séparer en une fonction aide à la lisibilité.
const toUrl = ({ pipelineType = '', ticketId = '', productId = '' }) => { if (pipelineType) { return `/pipeline/${pipelineType}`; } if (ticketId) { return `/ticket/${ticketId}`; } if (productId) { return `/product/${productId}`; } return '/pipeline/local'; } export const OwnRedirect = () => { const params = useParams<{ pipelineType?: string; ticketId?: string; productId?: string; }>(); return <Redirect to={toUrl(params)}/>; };
Vous pouvez utiliser un Tagged Sum . Par exemple:
p>
// Generic functions // B is the function compose combinator const B = g => f => x => g (f (x)) const taggedSum = xs => Object.fromEntries ( xs.map(tag => [tag, value => ({ tag, value })]) ) const cata = matches => ({ tag, value }) => matches[tag] (value) ///////////////////////// const Kind = taggedSum (['pipeline', 'ticket', 'product', 'local' ]) const path = cata ({ pipeline: x => `/pipeline/${x}`, ticket: x => `/ticket/${x}`, product: x => `/product/${x}`, local: () => `/pipeline/local` }) const output1 = B (path) (Kind.pipeline) (1) const output2 = B (path) (Kind.ticket) (14) const output3 = B (path) (Kind.product) (3421) const output4 = B (path) (Kind.local) (0) console.log ('pipeline:', output1) console.log ('ticket:', output2) console.log ('product:', output3) console.log ('local:', output4)
Fournir l'instance la plus minimale / simple de votre problème améliore la chance d'obtenir de bonnes réponses.
Déjà édité.