<?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: Wahidul Alam</title>
    <description>The latest articles on DEV Community by Wahidul Alam (@wahidsherief).</description>
    <link>https://dev.to/wahidsherief</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%2F924031%2Fe3d59696-b7fc-4e5b-a75b-33399c19528c.jpeg</url>
      <title>DEV Community: Wahidul Alam</title>
      <link>https://dev.to/wahidsherief</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wahidsherief"/>
    <language>en</language>
    <item>
      <title>How to use Formik to update multiple forms in React JS?</title>
      <dc:creator>Wahidul Alam</dc:creator>
      <pubDate>Sat, 10 Sep 2022 14:32:42 +0000</pubDate>
      <link>https://dev.to/wahidsherief/how-to-use-formik-to-update-multiple-forms-in-react-js-1hd3</link>
      <guid>https://dev.to/wahidsherief/how-to-use-formik-to-update-multiple-forms-in-react-js-1hd3</guid>
      <description>&lt;p&gt;I am using &lt;strong&gt;Formik along with Yup&lt;/strong&gt; to handle form submission with validation. I have successfully applied in create form. However, in update form I am facing issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I have multiple update forms in accordion as the picture below and when I click submit button it applies in all update forms of the accordion. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is not capturing the field default value when the form is being submitted.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4MCh86ew--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5bdpttivoms6tk1m4sgk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4MCh86ew--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5bdpttivoms6tk1m4sgk.png" alt="Image description" width="861" height="837"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WErKWeL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scgw07yrsxvq4xa2m5vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WErKWeL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scgw07yrsxvq4xa2m5vs.png" alt="Image description" width="874" height="848"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Formik Codes:&lt;/strong&gt;&lt;/em&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 updateForm = useFormik({
    initialValues: {
        name: '',
        category: '',
        image: ''
    },
    validationSchema: yup.object({
        name: yup.string().min(2, "Product name should be at least 2 characters").required('Product name is required'),
        category: yup.string().required('Product category is required'),
        image: yup.string().required('Product image is required'),
    }),
    onSubmit: (values) =&amp;gt; {
        // updateProduct(values)
        console.log(values)
    }
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;JSX: Multiple Product List with map which generates multiple forms&lt;/em&gt;&lt;/strong&gt;&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;div className="col-lg-7"&amp;gt;
    &amp;lt;div className="card-style mb-30"&amp;gt;
        &amp;lt;p className="text-sm mb-20"&amp;gt;
            Total products: {products.length}
        &amp;lt;/p&amp;gt;
        {
            products.length &amp;gt; 0 &amp;amp;&amp;amp;
            products.map((product) =&amp;gt; (
                &amp;lt;div key={product.id} className="accordion mb-2" id="accordionExample"&amp;gt;
                    &amp;lt;div className="accordion-item"&amp;gt;
                        &amp;lt;div className="accordion-header p-3" id="headingOne"&amp;gt;
                            &amp;lt;img src={require(`../../../../public/bvend/products/${product.image}`)} className="image-in-list" alt={product.name} /&amp;gt;
                            &amp;lt;span className="ms-3"&amp;gt;{product.name}&amp;lt;/span&amp;gt;
                            &amp;lt;span className="ms-3"&amp;gt;{product.category}&amp;lt;/span&amp;gt;
                            &amp;lt;span className="float-end"&amp;gt;
                                &amp;lt;button onClick={() =&amp;gt; showEditPanel(product.id)} className='p-0 text-primary btn-link btn'&amp;gt;
                                    &amp;lt;i className="lni lni-pencil-alt"&amp;gt;&amp;lt;/i&amp;gt;
                                &amp;lt;/button&amp;gt;
                                &amp;lt;button onClick={() =&amp;gt; showRemovePanel(product.id)} className='p-0 ms-2 text-danger btn-link btn'&amp;gt;
                                    &amp;lt;i className="lni lni-trash-can"&amp;gt;&amp;lt;/i&amp;gt;
                                &amp;lt;/button&amp;gt;
                            &amp;lt;/span&amp;gt;
                        &amp;lt;/div&amp;gt;
                        &amp;lt;div id='edit-panel' className={editPanel === product.id ? 'd-block' : 'd-none'}&amp;gt;
                            &amp;lt;div className="accordion-body bg-light"&amp;gt;
                                &amp;lt;Form noValidate onSubmit={updateForm.handleSubmit}&amp;gt;
                                    &amp;lt;Form.Group controlId="validationCustom01" className="input-style-1"&amp;gt;
                                        &amp;lt;Form.Control
                                            className={updateForm.errors.name &amp;amp;&amp;amp; "is-invalid"}
                                            name="name"
                                            required
                                            type="text"
                                            placeholder="Enter product name"
                                            onChange={updateForm.handleChange}
                                            onBlur={updateForm.handleBlur}
                                            value={product.name}
                                        /&amp;gt;
                                        &amp;lt;Form.Control.Feedback type="invalid"&amp;gt;
                                            {updateForm.errors.name &amp;amp;&amp;amp; updateForm.errors.name}
                                        &amp;lt;/Form.Control.Feedback&amp;gt;
                                    &amp;lt;/Form.Group&amp;gt;
                                    &amp;lt;Form.Group controlId="validationCustom02" className="select-style-2"&amp;gt;
                                        &amp;lt;CategorySelect
                                            formik={updateForm}
                                            filterOption={product.category} /&amp;gt;
                                        &amp;lt;Form.Control.Feedback type="invalid"&amp;gt;
                                            {updateForm.errors.category &amp;amp;&amp;amp; updateForm.errors.category}
                                        &amp;lt;/Form.Control.Feedback&amp;gt;
                                    &amp;lt;/Form.Group&amp;gt;
                                    &amp;lt;Form.Group controlId="formFileLg" className="input-style-1"&amp;gt;
                                        &amp;lt;Form.Control
                                            className={updateForm.errors.image &amp;amp;&amp;amp; "is-invalid"}
                                            name="image"
                                            required
                                            type="file"
                                            placeholder="Choose product image"
                                            onChange={updateForm.handleChange}
                                            onBlur={updateForm.handleBlur}
                                        /&amp;gt;
                                        &amp;lt;Form.Control.Feedback type="invalid"&amp;gt;
                                            {updateForm.errors.name &amp;amp;&amp;amp; updateForm.errors.name}
                                        &amp;lt;/Form.Control.Feedback&amp;gt;
                                    &amp;lt;/Form.Group&amp;gt;
                                    &amp;lt;div className="d-grid gap-2 d-md-flex justify-content-md-end"&amp;gt;
                                        &amp;lt;Button type="submit" className="main-btn primary-btn btn-hover btn-sm"&amp;gt;Update Product&amp;lt;/Button&amp;gt;
                                    &amp;lt;/div&amp;gt;
                                &amp;lt;/Form&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;
                        &amp;lt;div id='remove-panel' className={removePanel === product.id ? 'd-block' : 'd-none'}&amp;gt;
                            &amp;lt;div className="accordion-body bg-light"&amp;gt;
                                &amp;lt;h3&amp;gt;Are you sure to remove?&amp;lt;/h3&amp;gt;
                                &amp;lt;div className="d-grid gap-2 d-md-flex justify-content-md-end mt-4"&amp;gt;
                                    &amp;lt;button onClick={() =&amp;gt; removeProduct(product.id)} className="main-btn danger-btn btn-hover btn-sm"&amp;gt;Move to trash&amp;lt;/button&amp;gt;
                                    &amp;lt;button onClick={() =&amp;gt; setRemovePanel(null)} className="main-btn light-btn btn-hover btn-sm"&amp;gt;Cancel&amp;lt;/button&amp;gt;
                                &amp;lt;/div&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
            ))
        }
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;stackoverflow: &lt;a href="https://stackoverflow.com/questions/73663057/how-to-use-formik-to-update-multiple-forms-in-react-js"&gt;https://stackoverflow.com/questions/73663057/how-to-use-formik-to-update-multiple-forms-in-react-js&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  help #reactjs #formik #yup
&lt;/h1&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>form</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
