Flow est un outil de développement déclaratif qui permet d’ajouter du typage de manière statique sur du Javascript et JSX. Il permet de réduire les potentiels bugs liés au développement du programme durant le développement et non durant le runtime. Il permet entre autres de fournir une description plus complète lors de l’autocomplétion. C’est entre autres une des recommandations de l’équipe React : https://fr.reactjs.org/docs/static-type-checking.html
Dans cet article nous aborderons quatre points principaux :
La première fonctionnalité de Flow est le typage des variables. En React Native ou plutôt JavaScript, les variables ne sont pas typées. Ce qui au cours de l’évolution du programme peut devenir un handicap en termes de maintenance, et de fiabilité. Les changements de types au cours du déroulement du programme peuvent être dramatiques s’ils ne sont pas maîtrisés. Or avec Flow, on peut maîtriser ces changements de type, à conditions de bien les typer. Et bien sûr, grâce au typage des variables, on obtient une autocomplétion encore plus intelligente et plus précise.
yarn add flow-bin
Ou
npm install --save flow-bin
Ensuite, on modifie le package.json (si celle-ci n’est pas ajoutée automatiquement lors de l’installation).
{
//…rest,
« flow »: »flow »
}
|
npm run flow init
Ouyarn run flow init
Et voilà ! Flow est installé.// @flow
on peut désormais utiliser la commande :yarn run flow
ou :npm run flow
Celle-ci permet de demander à Flow de vérifier que notre code Javascript est typé correctement. Flow permet de signaler des erreurs de type de manière statique (au niveau de l’IDE) durant le développement.type Props = { /** * Count value to increment * * @type {number} */ counter: number; } |
const CounterView = ({ counter, incrementCounter }: Props) => ( <View style=> <Text>{counter}</Text> <Button onPress={incrementCounter} title= »Increment » /> </View> ); export default CounterView; |
const CounterContainer = () => { const [counter, increment] = useState(0); const incrementCounter = useCallback(() => { increment(counter+1); },[counter]); return (<CounterView />); } |
return (<CounterView counter={counter} incrementCounter={incrementCounter} />); |
type Props = { ….restProps /** * Optional Label for our counter * * @type {string} */ label?: string; } |
Donc on tente ça :
<Text>{label.}</Text> |
L’autocomplétion ne fonctionne pas, alors on force, parce que cette méthode on la connait par coeur quoi :
<Text>{label.toUpperCase()}</Text> |
Mais là Flow n’est pas d’accord avec nous, et c’est normal ! On peut également caster nos variables, et faire la majorité des choses qu’on peut faire avec un langage comme Java ou Swift en termes de typage.
{label && <Text>{label.toUpperCase()}</Text>} |
Bingo ! Mon composant est fonctionnel !
Bien évidemment avec cet exemple, nous avons seulement vu les bases de Flow, comment on l’utilise, pourquoi l’utiliser. Mais sur un projet de grande envergure, le typage est d’une grande aide, et permet d’assurer une certaine fiabilité sur le long terme. Généralement Flow s’utilise au cours du développement et également dans une chaîne d’intégration continue.
Et c’est ainsi qu’on termine cet article sur Flow. Tout du long de cet article, vous avez pu lire l’intérêt de Flow, comment installer sa bibliothèque dans un projet React Native et comment l’utiliser avec des exemples concrets, ainsi qu’un comparatif entre TypeScript et Flow qui permet de peser le pour et le contre de chacun de ces outils.