<?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: Lakshmeesha</title>
    <description>The latest articles on DEV Community by Lakshmeesha (@ltsharma).</description>
    <link>https://dev.to/ltsharma</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%2F359152%2Fd73e41dd-c2d7-4c37-83e7-aca8b552478d.jpg</url>
      <title>DEV Community: Lakshmeesha</title>
      <link>https://dev.to/ltsharma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ltsharma"/>
    <language>en</language>
    <item>
      <title>Easy React Native Form management with react-formr - DRY</title>
      <dc:creator>Lakshmeesha</dc:creator>
      <pubDate>Wed, 23 Sep 2020 18:52:50 +0000</pubDate>
      <link>https://dev.to/ltsharma/easy-react-native-form-management-with-react-formr-47n5</link>
      <guid>https://dev.to/ltsharma/easy-react-native-form-management-with-react-formr-47n5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Managing form values, validation, focus &amp;amp; submission is kind of boring &amp;amp; pain&lt;/strong&gt; we all know that. But if we can centralise that form management stuff to one package, that will be good enough for developer to think and develop something important than this.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't reapeat yourself is a thing, There are many plugins available at ease, But...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The plugins i have seen before are more into react oriented than the react native. like formik, it dont have anything specific binder to react-native, again we have to give all values or hndling functions separately &amp;amp; again we need to manage focus in our code. &lt;/p&gt;

&lt;h1&gt;
  
  
  A solution - &lt;strong&gt;react-formr&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcikxwobk497wq3dyof1z.png" alt="react-formr"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here we go with &lt;a href="https://www.npmjs.com/package/" rel="noopener noreferrer"&gt;react-formr&lt;/a&gt;, a package is written for react native. &lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Form validation on given rules (regex) or predefined types(email, phone, etc).&lt;/li&gt;
&lt;li&gt;Input binder function includes almost everything &lt;code&gt;TextInput&lt;/code&gt; required to handle form.&lt;/li&gt;
&lt;li&gt;Auto focus next available input on return press, triggering &lt;code&gt;onFocuseFinish&lt;/code&gt; on last input return key press.&lt;/li&gt;
&lt;li&gt;Input blur validation &amp;amp; validate on change of invalid input.&lt;/li&gt;
&lt;li&gt;Listen to live changes in form using &lt;code&gt;onChange&lt;/code&gt; props.&lt;/li&gt;
&lt;li&gt;Written with Typescript&lt;/li&gt;
&lt;li&gt;Not limited to TextInput, it can be used anything with handle value change &amp;amp; values object.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: &lt;code&gt;useFormr&lt;/code&gt; hook is available now, no need to wrap the form with Formr component anymore.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Let's jump into using it
&lt;/h2&gt;

&lt;p&gt;first &amp;amp; foremost  - &lt;strong&gt;installation&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;yarn add react-formr&lt;/code&gt; or &lt;code&gt;npm install react-formr&lt;/code&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/react-formr" rel="noopener noreferrer"&gt;react-formr&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  A big one
&lt;/h3&gt;

&lt;p&gt;Form with complete available options from formr&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Formr form manager wrapper&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Former&lt;/span&gt; 
    &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Triggers if any value change in form&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="nx"&gt;onFinishFocus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Triggers all form fields finished focusing&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="nx"&gt;formFields&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="c1"&gt;//Initial value can be added here&lt;/span&gt;
        &lt;span class="nx"&gt;validation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
          &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
              &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="c1"&gt;// Provides a function to render form inputs }&lt;/span&gt;
        &lt;span class="p"&gt;{({&lt;/span&gt;
          &lt;span class="nx"&gt;inputBinder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Package of TextInput props&lt;/span&gt;
          &lt;span class="nx"&gt;onChangeHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// included in inputBinder&lt;/span&gt;
          &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// included in inputBinder&lt;/span&gt;
          &lt;span class="nx"&gt;onBlurHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;// included in inputBinder&lt;/span&gt;
          &lt;span class="nx"&gt;onSubmitHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;onSubmitEditingHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;refsHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;// included in inputBinder&lt;/span&gt;
          &lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;// included in inputBinder if you are making custom input component with this props&lt;/span&gt;
          &lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;// included in inputBinder if you are making custom input component with this props&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;
              &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
                &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TextInput&lt;/span&gt;
                  &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
                    &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                      &lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;
                        &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                        &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;}}&lt;/span&gt;
                  &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                  &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;refsHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
                  &lt;span class="nx"&gt;onBlur&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="nf"&gt;onBlurHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
                  &lt;span class="nx"&gt;onChangeText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onChangeHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
                    &lt;span class="nx"&gt;onSubmitEditing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onSubmitEditingHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt; 
                &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="nx"&gt;onPress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onSubmitHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;submitIt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;              &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/View&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;             &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//end of return&lt;/span&gt;
           &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="c1"&gt;// end of formr function&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Formr&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Shorter version
&lt;/h3&gt;

&lt;p&gt;Using only Formr's &lt;strong&gt;inputBinder&lt;/strong&gt; function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Former&lt;/span&gt; &lt;span class="nx"&gt;formFields&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
        &lt;span class="nx"&gt;validation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
          &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
              &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="p"&gt;{({&lt;/span&gt;
          &lt;span class="nx"&gt;inputBinder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
          &lt;span class="nx"&gt;onSubmitHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;valid&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;
              &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
                &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TextInput&lt;/span&gt;
                  &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
                    &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                      &lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;
                        &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                        &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;}}&lt;/span&gt;
                  &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nf"&gt;inputBinder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt; &lt;span class="c1"&gt;// THIS IS WHERE THE DIFFERENCE COMES&lt;/span&gt;
                &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Button&lt;/span&gt; 
                   &lt;span class="nx"&gt;onPress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onSubmitHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;submitIt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))}&lt;/span&gt; 
&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;              &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/View&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;             &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//end of return&lt;/span&gt;
           &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="c1"&gt;// end of formr function&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Formr&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  My Shortest version
&lt;/h3&gt;

&lt;p&gt;The shortest &amp;amp; easiest version is to make a custom input component with error handled inside it.&lt;/p&gt;

&lt;h4&gt;
  
  
  CustomInput component with error message
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CustomInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forwardRef&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt;&lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;errorMsg&lt;/span&gt;&lt;span class="p"&gt;,...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;showError&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;!==&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;valid&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TextInput&lt;/span&gt; 
            &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; 
                        &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; 
            &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;borderWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;showError&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; 
        &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;showError&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Text&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;errorMsg&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Text&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/View&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; 
&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Formr form with CustomInput
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Former&lt;/span&gt; &lt;span class="nx"&gt;formFields&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
        &lt;span class="nx"&gt;validation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
          &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;{({&lt;/span&gt;
          &lt;span class="nx"&gt;inputBinder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Package of TextInput props.&lt;/span&gt;
          &lt;span class="nx"&gt;onSubmitHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// For submitting form.&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;
              &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
                &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CustomInput&lt;/span&gt; 
                    &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nf"&gt;inputBinder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt; 
                    &lt;span class="nx"&gt;errorMessage&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Something is wrong here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
                 &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="nx"&gt;onPress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onSubmitHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;submitThis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;              &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/View&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;             &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//end of return&lt;/span&gt;
           &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="c1"&gt;// end of formr function&lt;/span&gt;
       &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Formr&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Is't it easy??&lt;/p&gt;

&lt;h3&gt;
  
  
  The Standouts
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;inputBinder&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This function includes almost everything for &lt;b&gt;&lt;code&gt;TextInput&lt;/code&gt;&lt;/b&gt; to manage form with inputs, They are - &lt;code&gt;value&lt;/code&gt;, &lt;code&gt;onChangeText&lt;/code&gt;, &lt;code&gt;onBlur&lt;/code&gt;, &lt;code&gt;ref&lt;/code&gt;, &lt;code&gt;onSubmitEditing&lt;/code&gt; also &lt;code&gt;valid&lt;/code&gt; &amp;amp; &lt;code&gt;touched&lt;/code&gt; if you are making custom input component with these props .&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;validation&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Receives object with predefined commonly used &lt;strong&gt;type&lt;/strong&gt; or regex &lt;strong&gt;rules&lt;/strong&gt; to validate, also we can mention &lt;strong&gt;required&lt;/strong&gt; field here, Option of providing rules to the input is unlimited with regex.&lt;/p&gt;

&lt;h4&gt;
  
  
  Auto focusing input
&lt;/h4&gt;

&lt;p&gt;Unlike react form plugins, as it is built for react-native, it handles focusing next input (or the element have ref &amp;amp; handles focus) easily. Let's see more about this in next topic.&lt;/p&gt;

&lt;h1&gt;
  
  
  Common problems &amp;amp; solutions
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Auto focusing next input with ref
&lt;/h3&gt;

&lt;p&gt;The best user experience is to focus next available input on next button press in already visible keyboard, Nobody wants to touch all available inputs to fill the form. that is kind of must for all forms now. The problem here to manage refs of input &amp;amp; focusing them with &lt;code&gt;onSubmitEditing&lt;/code&gt;. &lt;br&gt;
Formr solves this hassle by maintaining refs inside it &amp;amp; focusing next ref on submitHandler.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing Validation
&lt;/h3&gt;

&lt;p&gt;Yes, Managing validation with multiple input will go very long or unexpectedly complicated. Every field with its own type of validation handling, need to handle touched states to show error after interaction, it will become hefty if we don't plan it properly.&lt;br&gt;
Formr has the thing what we don't want to write it again &amp;amp; again. One package handles touch state management, validation cycles, focus events for validations &amp;amp; so on. it also validates fields on any value change or submit press, updates valid object, it focuses untouched input fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing form values
&lt;/h3&gt;

&lt;p&gt;We might need to maintain multiple states for input values, that is kind of too much if we are trying to make a function to update all &amp;amp; validate.&lt;br&gt;
Formr receives initial values, manages it on update of any form fields, provides values object in multiple places, i.e. in form render function as values, in &lt;code&gt;onSubmit&lt;/code&gt;, in &lt;code&gt;onFinishFocus&lt;/code&gt; prop, in &lt;code&gt;onChange&lt;/code&gt; prop.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final
&lt;/h1&gt;

&lt;p&gt;While i was working with my projects, i felt that I'm writing something repeatedly &amp;amp; unnecessarily. If i try to go for any plugins to do it, has its own learning curve &amp;amp; road blocks or i have to use multiple plugin to do 1 form, that is little too much to handle later. So this, I have created a package to share with everyone of you. Suggest me if anything i can improve in this.&lt;br&gt;
&lt;strong&gt;NPM&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/react-formr" rel="noopener noreferrer"&gt;react-formr&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Github&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/ltsharma/react-formr" rel="noopener noreferrer"&gt;react-formr&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ltsharma/react-formr/commits?author=ltsharma" rel="noopener noreferrer"&gt;my github profile&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>npm</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>React Native Performance Optimisation With Hooks</title>
      <dc:creator>Lakshmeesha</dc:creator>
      <pubDate>Fri, 12 Jun 2020 23:39:48 +0000</pubDate>
      <link>https://dev.to/ltsharma/performance-optimisation-react-native-with-hooks-a77</link>
      <guid>https://dev.to/ltsharma/performance-optimisation-react-native-with-hooks-a77</guid>
      <description>&lt;h2&gt;
  
  
  Working Just fine but not that great? 😑.
&lt;/h2&gt;

&lt;p&gt;Its very easy for developers to write working &lt;code&gt;react-native&lt;/code&gt; app, but not best performing react-native app. Its been a while, i was finding a way to write a react-native app with maximum performance possible. I was trying all the best practice possible to make app better. &lt;br&gt;
Here are some of my collections of methods, tips &amp;amp; tricks to improve react-native app performance🔥.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Stop using inline functions 🌀
&lt;/h2&gt;

&lt;p&gt;First thing, stop using inline function calls right now, react native thinks that the props which has inline function is a new value every-time &amp;amp; it causes unnecessary re-renders in its children components.&lt;/p&gt;
&lt;h4&gt;
  
  
  Solution
&lt;/h4&gt;

&lt;p&gt;Move all your inline functions to const. (&amp;amp; next step as well )&lt;/p&gt;
&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;After✅&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
So now app performance is far better?. humm!, not yet, but we are doing some progress. for now we made component much legible.

&lt;h2&gt;
  
  
  2. Make proper use of &lt;code&gt;useCallback&lt;/code&gt;♻️.
&lt;/h2&gt;

&lt;p&gt;Any of your functions which uses to re-render your component, &lt;br&gt;
which should not cause unnecessary re render, whenever you don't want, whichever the functions used inside jsx elements, bring it out like shown in last step and apply our hero hook &lt;code&gt;useCallback&lt;/code&gt;&lt;br&gt;
what will it do?. that is not part of this post anyway, you can find in in many docs &amp;amp; posts. But i will just show how we can implement it to improve react-native performance.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
And now we defiantly made some progress by applying our hero hook. This makes sure the FlatList will not re-render because the &lt;code&gt;AwesomeChild&lt;/code&gt; is memorised &amp;amp; there is nothing to change its value.&lt;br&gt;
 you can observe from above code, empty bracket is used just after our old function wrapping with useCallback, that is dependancy, that is required incase the function is consuming any of other values.

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
The above code is written to add 1 to its last state, but it always sets 1, because the useCallback memorised the states &lt;code&gt;pressCount&lt;/code&gt; as 0 at the first render, whenever we use the state inside useCallback it is always 0, so every time we press, it will be 0+1 = 1. to get the latest values, we need to add states to the empty array inside useCallback. i.e, &lt;code&gt;useCallback(()=&amp;gt;{...},[pressCount])&lt;/code&gt; &lt;br&gt;
So its bit of headache to find dependency and fill, i know right!?, for that you just need to configure eslint &amp;amp; eslint-react-hook, after that VS code will take care of it.&lt;br&gt;
&lt;strong&gt;Before applying &lt;code&gt;useCallback&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kAvdj03Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m1p1woxdyqnujo82b1k3.gif" alt="Before applying useCallback"&gt;.&lt;br&gt;
Notice the lag of activating tab.&lt;br&gt;
&lt;strong&gt;After applying &lt;code&gt;useCallback&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jX8IysyL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/akb5e1b8ssaowxzax8c0.gif" alt="After applying useCallback"&gt;.

&lt;h2&gt;
  
  
  3. &lt;code&gt;memo&lt;/code&gt; for Whole component🚦.
&lt;/h2&gt;

&lt;p&gt;use &lt;code&gt;export default React.memo(AwesomeChild)&lt;/code&gt; to export almost all of your component, this is very similar to PureComponent from react class turf. it prevents re-rendering of components by comparing prev &amp;amp; next props, sometime it will allow render for some of unwanted prop changes, to level up the restrictions, we can use areEqual function as 2nd argument of the &lt;code&gt;React.memo&lt;/code&gt; function,&lt;/p&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;

&lt;p&gt;Unrestricted memo&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
 Restricted memo&lt;br&gt;
 &lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
In this, component will re-render only if &lt;code&gt;text&lt;/code&gt; prop changes from parent component, no re-renders if &lt;code&gt;style&lt;/code&gt; prop changes.&lt;br&gt;
(in most of the cases, normal memo will work without any problems)

&lt;h2&gt;
  
  
  4. Others tips🔧.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;configure VS Codes &amp;lt;-&amp;gt; eslint for writing optimum codes &amp;amp; use prettifier for make your code neat &amp;amp; clean.&lt;/li&gt;
&lt;li&gt;Keep imports clean, remove unused imports, (eslint will help you by showing it).&lt;/li&gt;
&lt;li&gt;Don't use inline styles, make maximum use of StyleSheet, (eslint will help you by showing it). &lt;/li&gt;
&lt;li&gt;carefully use &lt;code&gt;useEffect&lt;/code&gt;, with proper dependency and conditions to do the actions.&lt;/li&gt;
&lt;li&gt;to find-out what is causing waste re render - use this nice package, install as dev dependancy &lt;a href="https://github.com/welldone-software/why-did-you-render"&gt;https://github.com/welldone-software/why-did-you-render&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;My .eslint.js: &lt;a href="https://gist.github.com/ltsharma/cc88c8f96536f656570b23586b4e3098"&gt;https://gist.github.com/ltsharma/cc88c8f96536f656570b23586b4e3098&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My devdependancy: &lt;a href="https://gist.github.com/ltsharma/04344dbb530d65eb1341b415e5df5962"&gt;https://gist.github.com/ltsharma/04344dbb530d65eb1341b415e5df5962&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I Hope this post helps some of you guys, i figured it out by spending hours together, thought of sharing which is not easily available on internet. &lt;br&gt;
Comment your thought &amp;amp; tips...&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>javascript</category>
      <category>codequality</category>
    </item>
  </channel>
</rss>
