<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: José Wheelock</title>
    <description>The latest articles on DEV Community by José Wheelock (@wheel0ck).</description>
    <link>https://dev.to/wheel0ck</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F831228%2F7d7a67e8-706e-44ce-8551-be26e81254e0.png</url>
      <title>DEV Community: José Wheelock</title>
      <link>https://dev.to/wheel0ck</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wheel0ck"/>
    <language>en</language>
    <item>
      <title>React Desing Pattern: Props Collection and Getters</title>
      <dc:creator>José Wheelock</dc:creator>
      <pubDate>Fri, 29 Apr 2022 10:50:28 +0000</pubDate>
      <link>https://dev.to/wheel0ck/react-desing-pattern-props-collection-and-getters-2opm</link>
      <guid>https://dev.to/wheel0ck/react-desing-pattern-props-collection-and-getters-2opm</guid>
      <description>&lt;p&gt;Dans ce pattern, l'idée c'est d'envoyer un object de props dans le component:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;Title {...collectionProps} year="2010" /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;En définisant un getteur on va avoir plus de flexibilité:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 const getCollectionPropsAdvanced = ({ country, ...other } = {}) =&amp;gt; {
    return {
      country,
      city: "Paris",
      ...other
    };
  };

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avec notre fonction, on va pouvoir définir des props par défaut: &lt;br&gt;
&lt;code&gt;{ country, ...other } = {}&lt;/code&gt;&lt;br&gt;
Effectuer des actions spécifique sur une props (&lt;code&gt;country&lt;/code&gt;), ajouter autant de props qu'on veut (&lt;code&gt;...other&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/w8kxif"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codesandbox</category>
      <category>french</category>
      <category>react</category>
      <category>designpattern</category>
    </item>
    <item>
      <title>React Desing Pattern: Control Props</title>
      <dc:creator>José Wheelock</dc:creator>
      <pubDate>Fri, 29 Apr 2022 08:27:28 +0000</pubDate>
      <link>https://dev.to/wheel0ck/react-desing-pattern-control-props-4m8b</link>
      <guid>https://dev.to/wheel0ck/react-desing-pattern-control-props-4m8b</guid>
      <description>&lt;p&gt;Pour ce design pattern on va avoir besoin de la notion de 'Controlled Component'.&lt;br&gt;
Prenons comme exemple un formulaire avec un champ input, la valeur et le changement de ce champ est géré par le DOM.&lt;br&gt;
Dans le cas d'un 'Controlled Component', c'est nous qui géront le stockage de la valeur et le onChange.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;input type="text" value={name} onChange={handleName} /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Tout simplement, passons à l'implémentation:&lt;/p&gt;

&lt;p&gt;Step 1: Initiation du state&lt;br&gt;
&lt;code&gt;const [name, setName] = useState("");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 2: gestion du changement de valeur&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const handleName = (event) =&amp;gt; {
    setName(event.target.value);
  };

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: controle de l'élément&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;input type="text" value={name} onChange={handleName} /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/hc4e5g"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codesandbox</category>
      <category>french</category>
      <category>react</category>
      <category>designpattern</category>
    </item>
    <item>
      <title>React Desing Pattern: Reusable Style</title>
      <dc:creator>José Wheelock</dc:creator>
      <pubDate>Thu, 28 Apr 2022 07:30:55 +0000</pubDate>
      <link>https://dev.to/wheel0ck/react-desing-pattern-reusable-style-832</link>
      <guid>https://dev.to/wheel0ck/react-desing-pattern-reusable-style-832</guid>
      <description>&lt;p&gt;On peut définir le css d'un component de deux manières, la 1er in line et la 2eme avec des classes.&lt;/p&gt;

&lt;p&gt;On va donc passer en props, le style ou la classe qu'on veut: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;const Box = ({ title, styleInLine = {}, classCustom })&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pour la gestion des class, c'est là où ça devient intéressant:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const classNames = [
    boxStyle.default,
    title === "with condition" ? boxStyle.withCondition : "",
    classCustom
  ]
    .join(" ")
    .trim();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On va utiliser un tableau dans lequel on va join et trim pour avoir une sortie du genre: 'class1 class2 class3'.&lt;/p&gt;

&lt;p&gt;Ensuite on va pouvoir mettre des conditions dans le tableau pour afficher une class ou non:&lt;br&gt;
&lt;code&gt;title === "with condition" ? boxStyle.withCondition : "",&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Et voilà ! c'est pas compliqué et c'est smart !&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/u076i5"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codesandbox</category>
      <category>react</category>
      <category>french</category>
      <category>designpattern</category>
    </item>
    <item>
      <title>React Design Pattern: Compound Components</title>
      <dc:creator>José Wheelock</dc:creator>
      <pubDate>Tue, 26 Apr 2022 09:38:13 +0000</pubDate>
      <link>https://dev.to/wheel0ck/react-design-pattern-compound-components-45ce</link>
      <guid>https://dev.to/wheel0ck/react-design-pattern-compound-components-45ce</guid>
      <description>&lt;p&gt;Ce design pattern est assez simple à mettre en place: on a un component parent qui a des components enfants et ils sont reliés par un context.&lt;/p&gt;

&lt;p&gt;Ce qu'on voit généralement en production, c'est un component parent avec des enfants à qui on passe des props.&lt;br&gt;
Ici, l'approche est différente, c'est un component qui est découpé en plusieurs options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;lt;PreviewModal&amp;gt;
  &amp;lt;PreviewModal.Player /&amp;gt;
  &amp;lt;PreviewModal.Info /&amp;gt;
  &amp;lt;PreviewModal.Episode /&amp;gt;
&amp;lt;/PreviewModal&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans notre exemple, on a notre component PreviewModal qui mets à disposition plusieurs options : le player, les infos, les épisodes.&lt;br&gt;
Mais ces options font partie uniquement de la previewModal, parce que ils sont fortement liée par un context.&lt;/p&gt;

&lt;p&gt;Inplémentation:&lt;/p&gt;

&lt;p&gt;Step 1: Création du context&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const ModalContext = React.createContext(defaultContext);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour l'exemple, j'ai mis en place la forme la plus basique du context, pas de provider value.&lt;/p&gt;

&lt;p&gt;Step 2: Création du component parent&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const PreviewModal = ({ children }) =&amp;gt; {
  return (
    &amp;lt;&amp;gt;
      &amp;lt;p&amp;gt;Preview Modal like Netflix&amp;lt;/p&amp;gt;
      {children}
    &amp;lt;/&amp;gt;
  );
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: Connexion des enfants avec le parent&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const { episodes } = useContext(ModalContext);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bonus:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
PreviewModal.Player = Player;
PreviewModal.Info = Info;
PreviewModal.Episode = Episode;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La petite astuce, PreviewModal est un objet js donc on peut lui faire stocker les components.&lt;br&gt;
Je trouve qu'écrire le code de cette manière ça permet de mieux comprendre que la component parents à des "options"&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/bx124e"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codesandbox</category>
      <category>react</category>
      <category>designpattern</category>
      <category>french</category>
    </item>
    <item>
      <title>Design Pattern React : Custom Hooks</title>
      <dc:creator>José Wheelock</dc:creator>
      <pubDate>Mon, 25 Apr 2022 07:44:07 +0000</pubDate>
      <link>https://dev.to/wheel0ck/design-pattern-react-custom-hooks-3817</link>
      <guid>https://dev.to/wheel0ck/design-pattern-react-custom-hooks-3817</guid>
      <description>&lt;p&gt;Rien de compliqué ici, Le custom Hook commence toujours par 'use', son état est indépendant et permet de partager une logique entre chaque components.&lt;/p&gt;

&lt;p&gt;Implémentation:&lt;/p&gt;

&lt;p&gt;Step 1: Déclaration du use custom&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const useAdd = () =&amp;gt; {

  const [count, setCount] = useState(0);

  const add = () =&amp;gt; setCount(count + 1);

  return [count, add];
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le nom de la fonction doit commencer par 'use' et ensuite on fait ce qu'on veut, on peut utiliser les hooks de react return les valeurs qu'on veut, ect....&lt;/p&gt;

&lt;p&gt;Step 2: Utilisation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const [count1, add1] = useAdd();
const [count2, add2] = useAdd();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le point important à retenir, c'est que chaque instance du hook custom est indépendante.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/gsjoct"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>french</category>
      <category>designpattern</category>
      <category>react</category>
    </item>
    <item>
      <title>Design Pattern React : The State Reducer</title>
      <dc:creator>José Wheelock</dc:creator>
      <pubDate>Fri, 22 Apr 2022 10:08:02 +0000</pubDate>
      <link>https://dev.to/wheel0ck/design-pattern-react-the-state-reducer-1g21</link>
      <guid>https://dev.to/wheel0ck/design-pattern-react-the-state-reducer-1g21</guid>
      <description>&lt;p&gt;Pour ceux qui connaisse Redux, c'est le même principe, on a une action, un dispatch et un reduceur.&lt;/p&gt;

&lt;p&gt;Pour mettre en application ce design pattern on va se servir du Hook useReducer et on va utiliser le 3eme argument du Hook pour mettre un peu de piment. Ce 3eme argument permet d'initier le state à partir d'une props.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const [state, dispatch] = useReducer(reducer, initialArg, init);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Pour ceux qui ne connaissent pas il y a 3 points clés: &lt;/p&gt;

&lt;p&gt;1/ Un objet js appelé "Action":&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const monAction = { type: 'add', payload: 3}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;C'est un objet javascript (tout simplement), qui va contenir par convention (issus de redux) deux propriétés:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;type: généralement un string et est obligatoire.&lt;/li&gt;
&lt;li&gt;paylod: ce qu'on veut et est facultatif.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2/ le dispatcher : dispatch()&lt;/p&gt;

&lt;p&gt;C'est une function qui nous est donnée par le Hook useReducer.&lt;br&gt;
Cette fonction va permet d'envoyer une action dans le reducer.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dispatch({type: 'add', payload: 3})}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;3/ le reducer: reducer()&lt;/p&gt;

&lt;p&gt;Le reducer, c'est une fonction qu'on doit être définis et qui va nous servir à modifier le state.&lt;br&gt;
Dans mon exemple, je m'assure de retourner à chaque fois une nouvelle copie du state (redux).&lt;/p&gt;

&lt;p&gt;Cette fonction prend en 1er argument le state et en 2eme argument notre fameuse action.&lt;br&gt;
Le reducer, c'est tout simplement un switch qu'on va faire matcher avec notre action.type et on créer un nouveau state à partir de celui qu'on a passé en paramètre.&lt;/p&gt;

&lt;p&gt;Et voilà :)&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Implémentation:&lt;/p&gt;

&lt;p&gt;Step 1: Initialisation du State&lt;/p&gt;

&lt;p&gt;Pour commencer on va initialiser notre state : &lt;br&gt;
&lt;code&gt;useReducer(reducer, propsToInit, init);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;useReducer va utiliser la variable propsToInit et va la faire passer dans la fonction init&lt;/p&gt;

&lt;p&gt;Step 2: Condition d'initialisation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const init = (initState) =&amp;gt; {

  if (initState === null) return { ...defaultState };

  return { count: initState };
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notre function init est appelé une seul fois au montage du component. Elle va retourner notre state. &lt;/p&gt;

&lt;p&gt;Step 3: Utilisation du dispatch&lt;/p&gt;

&lt;p&gt;La fonction useReducer, nous retourne une fonction dispatch.&lt;br&gt;
&lt;code&gt;const [state, dispatch] = useReducer(reducer, propsToInit, init);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cette fonction va nous permettre de mettre à jours le state, en utilisant une action.&lt;/p&gt;

&lt;p&gt;Step 4: Définition des Actions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const actionAdd = {&lt;br&gt;
  type: "add"&lt;br&gt;
};&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Rien de compliqué ici, on déclare une constante pour stocker notre action.&lt;/p&gt;

&lt;p&gt;Step 5: Mise à jour du state&lt;/p&gt;

&lt;p&gt;Ensuite cette action passe dans le reducer, et on modifie le state.&lt;/p&gt;

&lt;p&gt;Step 6: Affichage&lt;/p&gt;

&lt;p&gt;Le component s'update et la nouvelle valeur s'affiche.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;iframe src="https://codesandbox.io/embed/p16r04"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>french</category>
      <category>designpattern</category>
    </item>
    <item>
      <title>Design Pattern React : The State Initialiser</title>
      <dc:creator>José Wheelock</dc:creator>
      <pubDate>Mon, 18 Apr 2022 10:11:18 +0000</pubDate>
      <link>https://dev.to/wheel0ck/design-pattern-react-the-state-initialiser-5g1m</link>
      <guid>https://dev.to/wheel0ck/design-pattern-react-the-state-initialiser-5g1m</guid>
      <description>&lt;p&gt;Ce design pattern permet de déporter la gestion du state dans un custom hook.&lt;/p&gt;

&lt;p&gt;On peut l'implémenter en 3 étapes simple: &lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;u&gt;Step 1 : Définition du defaultState&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Soit dans une const ou directement au niveau de l'argument de la fonction&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const defaultState = 0;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ou&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const useCounter = (initValue = 0) =&amp;gt; {}&lt;/code&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Step 2: Création du Hook Custom&lt;/u&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const useCounter = (initValue = defaultState) =&amp;gt; {
  const [count, setCount] = useState(initValue);

  const add = () =&amp;gt; setCount(count + 1);

  const reset = useCallback(() =&amp;gt; {
    setCount(initValue);
  }, [initValue]);

  return [count, add, reset];
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ici on utilise la mémoïsation (useCallback) et on retourne un tableau.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;u&gt;Step3: Utilisation du Hook Custom&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Comme avec useState, on va spread le tableau de notre useCounter et y'a plus cas.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const [count, add, reset] = useCounter();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;iframe src="https://codesandbox.io/embed/phojcs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>french</category>
      <category>react</category>
      <category>designpattern</category>
    </item>
  </channel>
</rss>
