{"id":109085,"date":"2018-03-15T16:21:39","date_gmt":"2018-03-15T16:21:39","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=109085"},"modified":"2025-09-19T09:04:21","modified_gmt":"2025-09-19T09:04:21","slug":"starting-react-with-woocommerce","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/","title":{"rendered":"Building Apps on React With Woocommerce"},"content":{"rendered":"<p>In just few couple of years javascript has evolved so well that the last 5 years for javascript has been PEERLESS.\u00a0 As of the small intro with JS, we enhanced the web interface.<\/p>\n<p>It added behavior to the web page, where the web page responds to a user instantly without loading a new page to process a request.<\/p>\n<p>But it is now way different than earlier it was, So today we will discuss about REACT library for creating front end web applications. We will start with basics and then we will move with some live examples as well.<\/p>\n<h3>You can find the whole react app repository on github<\/h3>\n<p><span style=\"color: #ff0000;\"><em><strong><a style=\"color: #ff0000;\" href=\"https:\/\/github.com\/am777\/react-ecommerce\" target=\"_blank\" rel=\"noopener\"> Github Link<\/a><\/strong><\/em><\/span><br \/>\nBasics aspects of react applications are<\/p>\n<ul>\n<li>components<\/li>\n<li>state<\/li>\n<li>props<\/li>\n<\/ul>\n<p>React works on Virtual DOM can be used to create fast <strong>single page applications<\/strong> ,\u00a0 react supports unidirectional data flow, this means that each time we are updating the state only, and the component will be updated automatically,<\/p>\n<p>whereas if you were a jquery programmer, you may know how many time we do update the DOM for every bit of code and we ourself don&#8217;t know how many places we have to do the updates.<\/p>\n<p>Whereas in react there are reusable components which will only be updated if and only if the state of that component is updated.<\/p>\n<p><span style=\"font-weight: 400;\">In this way only part of the app is updated, not the whole DOM<\/span> for now we will only build the app only using these later on other blogs we will create application with <strong>redux <\/strong>(for maintaining state of apps for large application)<\/p>\n<p>In React, for every\u00a0<a href=\"http:\/\/eloquentjavascript.net\/13_dom.html\">DOM object<\/a>, there is a corresponding &#8220;virtual DOM object.&#8221; A virtual DOM object is a\u00a0<em>representation<\/em> of a DOM object, like a lightweight copy. <span style=\"font-weight: 400;\">so it does not get updated every time when we perform operations on DOM until and unless we do update the state.<\/span><\/p>\n<p>Please check these below requirements in order to create a basic localstorage react app. BABEL is basically used to transpiling the <strong>REACT<\/strong> code into javascript.<\/p>\n<p>Also, you can visit <strong><a href=\"https:\/\/webkul.com\/woocommerce-react-development-services\/\" data-wpel-link=\"internal\">WooCommerce React Development<\/a> <\/strong>to enhance your online store with React headless development services or to create <a href=\"https:\/\/webkul.com\/pwa-and-amp\/\" data-wpel-link=\"internal\">Progressive Web App (PWA)<\/a>.<\/p>\n<p>you must have basic knowledge of these\u00a0 for creating the app<\/p>\n<ul>\n<li>html<\/li>\n<li>css<\/li>\n<li>javascript (<span style=\"font-weight: 400;\">ECMAScript<\/span> version 2015)<\/li>\n<li>npm<\/li>\n<li>node<\/li>\n<li>webpack<\/li>\n<li>babel(Basic knowledge)<\/li>\n<\/ul>\n<p><strong>Step 1 :- create basic react app using create-react-app package from npm<\/strong><\/p>\n<p>You can find the basic app create commands from here <a href=\"https:\/\/reactjs.org\/docs\/add-react-to-a-new-app.html\" target=\"_blank\" rel=\"noopener\">Basic react app<\/a><\/p>\n<pre class=\"brush:js\">npm install -g create-react-app \ncreate-react-app localstorage-app \n\nlocalstorage-app \n\nNow type :- npm start\n<\/pre>\n<p><b>Step 2 :- leave the index.js file as it is, because there is no need to edit this file as it is root of the react app and it basically used for initializing the app, or you can remove the unwanted files<\/b><\/p>\n<p><strong>Index.js\u00a0<\/strong><\/p>\n<pre class=\"brush:js\">import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from '.\/App';\n\nReactDOM.render(&lt;App \/&gt;, document.getElementById('root'));<\/pre>\n<p><strong>Step 3 :- Start editing App.js<\/strong><\/p>\n<pre class=\"brush:js\">import React, { Component } from 'react';\nimport Header from '.\/component\/header';\nimport ProductItem from '.\/component\/productitem';\nimport AddProduct from '.\/component\/addproduct';\nconst products = [\n  {\n    name: 'Apple',\n    price : 23.00,\n    img: 'apple.png'\n  },{\n    name: 'shorts',\n    price : 123.00,\n    img: 'capree.png'\n  },\n  {\n    name: 'Blazer',\n    price : 232.00,\n    img: 'blazer.png'\n  },{\n    name: 'jeans',\n    price : 223.00,\n    img: 'jeans.png'\n  },{\n    name: 'Laptop',\n    price : 2223.00,\n    img: 'laptop.png'\n  },{\n    name: 'Crowd',\n    price : 12113.00,\n    img: 'crowd.png'\n  },{\n    name: 'Jacket',\n    price : 4523.00,\n    img: 'jaket.png'\n  },{\n    name: 'Asus',\n    price : 313.00,\n    img: 'asus.png'\n  }\n\n];\n\nlocalStorage.setItem('products',JSON.stringify(products));\n\nclass App extends Component {\n  constructor(props){\n    super(props);\n    this.onDelete = this.onDelete.bind(this);\n    this.onAdd = this.onAdd.bind(this);\n    this.onEditSubmit = this.onEditSubmit.bind(this);\n  }\n  state = {\n    products:JSON.parse( localStorage.getItem('products') )\n  }\n  componentWillMount() {\n    const products = this.getProducts(); \n    this.setState({products})\n  }\n  onDelete(name){\n    const products = this.getProducts();\n    const filtered = products.filter( product =&gt; {\n        return product.name !== name;\n    });\n   \n    this.setState({products:filtered});\n  }\n\n  onAdd( name, price, img ) {\n    \/\/ console.log(name);\n    const new_product = {\n      name: name,\n      price: price,\n      img: img\n    }\n    const products = this.getProducts();\n    products.push(new_product);\n    \n    this.setState({products:products});\n  }\n\n  onEditSubmit( name, price, orignalName ) {\n    \n    const products = this.getProducts();\n    const filteredProducts = products.map( product =&gt; {\n      if( product.name == orignalName ) {\n        product.name = name;\n        product.price = price;\n      }\n      return product;\n    });\n   \n    this.setState({products:filteredProducts});\n  }\n\n  getProducts(){\n    return this.state.products;\n  }\n\n  render() {\n    \n    return (\n\n      &lt;div className=\"App\"&gt;\n        \n        &lt;Header \/&gt;    \n        &lt;div className=\"container\"&gt;\n        \n          &lt;div className=\"row\"&gt;\n            &lt;div className=\"col-md-12\"&gt;\n                &lt;div className=\"add-new-product\"&gt;\n                  &lt;AddProduct\n                  onAdd={this.onAdd}\n                  \/&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n          &lt;\/div&gt;\n\n          &lt;div className=\"row\"&gt;\n           &lt;div className=\"col-md-12\"&gt;\n            {\n              this.state.products.map( product =&gt; {\n                return (\n                  &lt;ProductItem\n                    key={product.name}\n                    {...product}\n                    onDelete={this.onDelete}\n                    onEditSubmit={this.onEditSubmit}\n                    onAdd={this.onAdd}\n                  \/&gt;        \n                )\n              })\n            }\n            &lt;\/div&gt;\n           &lt;\/div&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    );\n  }\n}\n\nexport default App;\n<\/pre>\n<p><strong>Step 4 :- component\/addproduct.js<\/strong><\/p>\n<pre class=\"brush:js\">import React, { Component } from 'react';\n\n\nclass AddProduct extends Component {\n  constructor(props){\n    super(props);\n    this.AddNewProduct = this.AddNewProduct.bind(this);\n\n  }\n  \n  AddNewProduct(evt){\n      \n      evt.preventDefault();\n      const name = document.getElementById('productName').value;\n      const price = document.getElementById('productPrice').value;\n      const img = document.getElementById('productImage').value;\n    \n      if( name &amp;&amp; parseInt( price ) &amp;&amp; img ) {\n          \n        this.props.onAdd( name, price, img );\n        \n        document.getElementById('productName').value = '';\n        document.getElementById('productPrice').value = '';\n        document.getElementById('productImage').value = '';\n\n      } \n\n  }\n  render() {\n\n    return (\n      &lt;form onSubmit={this.AddNewProduct}&gt;\n        &lt;div className=\"add-product-wrap\"&gt;\n          &lt;h2 className=\"text-capitalize\"&gt;Add new Product&lt;\/h2&gt;\n        \n          &lt;input type=\"text\" name=\"productName\" id=\"productName\" placeholder=\"Add product name\" \/&gt; \n          &lt;input type=\"text\" name=\"productPrice\" id=\"productPrice\" placeholder=\"Add product price\" \/&gt; \n          &lt;input type=\"text\" name=\"productImage\" id=\"productImage\" placeholder=\"Add product image name\" \/&gt; \n          &lt;button type=\"submit\"&gt;Add Product&lt;\/button&gt;\n          \n        &lt;\/div&gt;\n       &lt;\/form&gt;   \n    )\n  }\n}\n\nexport default AddProduct;\n\n<\/pre>\n<p><strong>Step 5 :- component\/header.js<\/strong><\/p>\n<pre class=\"brush:js\">import React, { Component } from 'react';\nimport '.\/App.css';\n\nclass Header extends Component {\n  \n  render() {\n\n    return (\n      &lt;header&gt;\n        &lt;div className=\"container fixed-top\"&gt;\n            \n          &lt;div className=\"row\"&gt;\n\n              &lt;div className=\"col-md-12\"&gt;\n\n                  &lt;h2 className=\"text-center tagline white\"&gt;Webkul Products Demo using React&lt;\/h2&gt;\n\n              &lt;\/div&gt;\n\n          &lt;\/div&gt;\n\n        &lt;\/div&gt;\n\n      &lt;\/header&gt;\n\n    );\n  }\n}\n\nexport default Header;\n<\/pre>\n<p><strong>Step 6 :- component\/productitem.js<\/strong><\/p>\n<pre class=\"brush:js\">import React, { Component } from 'react';\n\n\nclass ProductItem extends Component {\n  constructor(props){\n    super(props);\n    this.state = {\n      isEdit : false\n    }\n    this.onDelete = this.onDelete.bind(this);\n    this.onEdit = this.onEdit.bind(this);\n    this.onEditSubmit = this.onEditSubmit.bind(this);\n  }\n  onDelete(){\n    this.props.onDelete(this.props.name);\n  }\n  onEditSubmit(evt){\n    evt.preventDefault();\n    const name = document.forms[\"editForm\"][\"EProductName\"].value;\n    const price = document.forms[\"editForm\"][\"EProductPrice\"].value;\n    \n    if( name &amp;&amp; parseFloat( price ).toFixed(2)  ) {\n        \n      this.props.onEditSubmit( name, price, this.props.name );\n      this.setState({\n        isEdit:false\n      });\n      document.forms[\"editForm\"][\"EProductName\"].value = '';\n      document.forms[\"editForm\"][\"EProductPrice\"].value = '';\n\n    }\n  }\n  onEdit(){\n    this.setState({isEdit:true});\n  }\n  render() {\n    const { name, price, img, onDelete } = this.props;\n    const imgUrl = require('..\/images\/asus.png');\n    \n    return (\n      &lt;div key={name} className=\"productitems\"&gt;      \n        {\n          this.state.isEdit \n          ? (\n            &lt;div&gt;\n              &lt;form name=\"editForm\" onSubmit={this.onEditSubmit}&gt;            \n                &lt;div className=\"editor\"&gt;\n                  &lt;img src={imgUrl} alt={name} \/&gt;\n                  &lt;button className=\"DefProduct\"&gt;x&lt;\/button&gt;                                                        \n                  \n                &lt;\/div&gt;\n                &lt;div className=\"product-wrap extraclass\"&gt;\n                  &lt;input type=\"text\" name=\"EProductName\" defaultValue={name} ref={nameInput=&gt;this.nameInput=nameInput}\/&gt; \n                  &lt;input type=\"text\" name=\"EProductPrice\" defaultValue={parseFloat(price).toFixed(2)} ref={ priceInput =&gt; this.priceInput = priceInput} \/&gt; \n                &lt;\/div&gt;\n                &lt;button className=\"saveProduct\"&gt;Save&lt;\/button&gt;                                                        \n              &lt;\/form&gt;\n            &lt;\/div&gt;\n          ) \n          : (\n            &lt;div&gt;\n              &lt;div className=\"editor\"&gt;\n                &lt;img src={imgUrl} alt={name} \/&gt;\n                &lt;button onClick={this.onEdit}&gt;Edit&lt;\/button&gt;           \n              &lt;\/div&gt;\n              &lt;div className=\"product-wrap\"&gt;\n                &lt;h2&gt;{name} &lt;\/h2&gt; \n                &lt;span&gt;{'+parseFloat(price).toFixed(2)} &lt;\/span&gt; \n              &lt;\/div&gt; \n              &lt;button onClick={this.onDelete}&gt;Delete&lt;\/button&gt;\n            &lt;\/div&gt; \n          ) \n        } \n      &lt;\/div&gt; \n    ) \n  } \n} \nexport default ProductItem;\n\n<\/pre>\n<p><strong>Step 7 :- component\/App.css<\/strong><\/p>\n<pre class=\"brush:css\">.App {\n  text-align: center;\n}\n.add-product-wrap{\n  background-color: #f4f4f4;\n  padding: 30px;\n}\n.add-product-wrap input{\n  font-size: 16px;\n  font-weight: 600;\n  color: #888888;\n  padding: 10px;\n  width: 450px;\n  border-radius: 4px;\n  border: 2px solid #cccccc;\n  margin: 10px 10px;\n  display: inline-block;\n}\n.add-product-wrap button{ \n    margin: 20px 8px 10px 0px;\n    padding: 10px 20px;\n    font-size: 16px;\n    background-color: #ef7742;\n    color: #ffffff;\n    height: 48px;\n    border: 0px;\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n    margin-left: -1px;\n    font-weight: 600;\n    text-transform: uppercase;\n}\n.editor{ \n  position: relative;\n  display: block;\n}\n.editor:hover{ \n  background: rgba(0,0,0,.5);\n}\n.editor button:focus{ \n  border: none;\n  outline: none;\n}\n.editor button{ \n  display: none;\n  position: absolute;\n  top: 10px;\n  left: 5px;\n  width: 50px !important;\n  height: 50px;\n  border-radius: 50%;\n  font-size: 15px !important;\n}\n.editor:hover button{\n  display: inline-block;\n}\n.App-logo {\n  animation: App-logo-spin infinite 20s linear;\n  height: 80px;\n}\n.white{\n  color: #fff;\n}\n.react-contact{\n  color: #555;\n  font-size: 18px;\n\n}\n.productitems{\n  list-style: none;\n  margin-left: 0;\n  margin-bottom: 4.235801032em;\n  text-align: center;\n  display: inline-block;\n  width: 300px;\n  max-width: 100%;\n  box-shadow: 0 5px 32px 0 rgba(0,0,0,.15);\n  border-radius: 2px;\n  overflow: hidden;\n  margin: 40px 20px 40px 20px;\n  vertical-align: top;\n}\nbutton.DefProduct{\n  display: inline-block;\n  font-size: 24px !important;\n  width: 40px !important; \n  height: 40px;\n  padding: 0px !important; \n}\n.productitems .product-wrap{\n  padding:20px 20px 0px;\t\n}\n.productitems button{\n  background-color: #7d3f71;\n  border:none;\n  color: #ffffff;\t\n  width:100%;\n  display:inlie-block;\n  margin:0px;\n  padding: 10px;\n  font-size: 17px;\n}\n.productitems h2{\n  color: #6d6d6d;\n  margin:8px 0px 10px;\n  font-size:20px;\t\n  display:block;\n  text-transform:capitalize;\n}\n.productitems span{\n  color: #6d6d6d;\n  margin:0px 0px 10px 0px;\n  font-size:15px;\t\n  display:inline-block;\n}\n.product-wrap input{\n  padding: 5px;\n  margin: 11px 5px 0px;\n  border: 1px solid #ddd;\n}\n.extraclass{\n  padding-top: 0px !important;\n}\n.product-wrap input:last-child{\n  margin-bottom: 5px;\n}\n.page{\n  background: #d5d5d5;\n  padding: 50px;\n  display: block;\n  margin: 100px auto !important;\n}\np{\n  color: #333;\n}\nh1{\n  color: #333;\n}\n.navbar a{\n  color: #fff;\n  display: inline-block;\n  margin: 5px 25px;\n}\nheader {\n  background-color: #07365d;\n  color: white;\n}\n\n.App-title {\n  font-size: 1.5em;\n}\n\n.App-intro {\n  font-size: large;\n}\n\n@keyframes App-logo-spin {\n  from { transform: rotate(0deg); }\n  to { transform: rotate(360deg); }\n}\n\n.white {\n  color: #fff;\n}\n\/* ---Pagination End--- *\/\n\/* ---Footer Section--- *\/\nfooter {\n  background-color: #ffffff;\n}\nfooter p.footer-social-links {\n  margin: 26px 0px 17px;\n  text-align: right;\n}\nfooter span {\n  \/* background-image: url('images\/design-sprite.svg'); *\/\n  width: 16px;\n  height: 16px;\n  display: inline-block;\n  content: ' ';\n  opacity: .9;\n}\nfooter span:hover {\n  opacity: 1;\n}\nfooter span.twitter-link-footer {\n  background-position: 0px 0px;\n  margin-right: 15px;\n}\nfooter span.fb-link-footer {\n  background-position: -16px 0px;\n  margin-right: 15px;\n}\nfooter span.instagram-link-footer {\n  background-position: -32px 0px;\n}\nfooter .copyright {\n  font-weight: 600;\n  font-size: 14px;\n  color: #858585;\n  display: inline-block;\n  padding: 22px 0px 17px;\n  margin: 0 auto;\n}\nfooter .copyright + a {\n  display: inline-block;\n  margin-left: 15px;\n  margin-right: 15px;\n}\nfooter .copyright + a,\nfooter .copyright + a + a {\n  font-weight: 600;\n  font-size: 14px;\n  color: #0E4074;\n}\n.footer{\n    bottom: 0px;\n    height: px;\n    position: relative;\n}<\/pre>\n<p><span style=\"font-weight: 400;\">The Above code explains itself how we can use a component inside another component with states and events and props as well.<\/span><\/p>\n<p>The below screenshot shows how it looks when your app finally run on local using node.<\/p>\n<p>If you require expert assistance or want to develop custom unique functionality, <a href=\"https:\/\/webkul.com\/hire-woocommerce-developers\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">hire WooCommerce Developers<\/a>.<\/p>\n<p><a href=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg\"><img decoding=\"async\" class=\"alignnone wp-image-116595 size-full\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg\" alt=\"Webkul Products Demo using React\" width=\"1840\" height=\"1875\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg 1840w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-244x249.jpg 244w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-294x300.jpg 294w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-768x783.jpg 768w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1005x1024.jpg 1005w\" sizes=\"(max-width: 1840px) 100vw, 1840px\" loading=\"lazy\" \/><\/a><\/p>\n<p><a href=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1.jpg\"><img decoding=\"async\" class=\"alignnone wp-image-116596 size-full\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1.jpg\" alt=\"Add New Product \" width=\"1855\" height=\"965\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1.jpg 1855w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1-250x130.jpg 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1-300x156.jpg 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1-768x400.jpg 768w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App-1-1200x624.jpg 1200w\" sizes=\"(max-width: 1855px) 100vw, 1855px\" loading=\"lazy\" \/><\/a><\/p>\n<p>If you have any query regarding this blog you can comment below thanks for your time<\/p>\n<p>Do check the github link here : &#8211; <a href=\"https:\/\/github.com\/am777\/react-ecommerce\"><span style=\"color: #ff0000;\"><em><strong>Github Link<\/strong><\/em><\/span><\/a>.<\/p>\n<div class=\"wk-index-wrap\">\n<h3 id=\"support\" class=\"index-title copy-index\">Support<\/h3>\n<\/div>\n<div class=\"margin-bottom-50\">\n<p>For any technical assistance kindly\u00a0<a href=\"https:\/\/webkul.uvdesk.com\/en\/customer\/create-ticket\/\" target=\"_blank\" rel=\"noreferrer noopener\" data-wpel-link=\"exclude\">\u00a0raise\u00a0a ticket<\/a> or\u00a0reach\u00a0us by email at\u00a0support@webkul.com.<\/p>\n<p>Also, discover various solutions to add more features and enhance your online store by visiting the\u00a0<a href=\"https:\/\/store.webkul.com\/woocommerce-plugins.html\" target=\"_blank\" rel=\"noreferrer noopener\" data-wpel-link=\"internal\">WooCommerce plugins<\/a>. <a href=\"https:\/\/webkul.com\/react-native-app-development-services\/\">React Native App Development<\/a> by Webkul converts your WooCommerce store into a fast, fully functional mobile app with real-time updates and native performance.<\/p>\n<p>Thanks for Your Time ! Have a Good Day !!<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In just few couple of years javascript has evolved so well that the last 5 years for javascript has been PEERLESS.\u00a0 As of the small intro with JS, we enhanced the web interface. It added behavior to the web page, where the web page responds to a user instantly without loading a new page to <a href=\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":67,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1808,6357,6358,1773,1260,2805],"tags":[6360,6359,6361],"class_list":["post-109085","post","type-post","status-publish","format-standard","hentry","category-ajax","category-react-js","category-react-woocommerce","category-woocommerce","category-wordpress","category-wordpress-woocommerce-salesforce-connector","tag-react-ecommerce","tag-react-js","tag-react-woocommerce"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building Apps on React Using Wordpress Woocommerce<\/title>\n<meta name=\"description\" content=\"React works on Virtual DOM can\u00a0be used tocreate fast single page applications,\u00a0 react supports unidirectional data flow which makes it even beter\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Apps on React Using Wordpress Woocommerce\" \/>\n<meta property=\"og:description\" content=\"React works on Virtual DOM can\u00a0be used tocreate fast single page applications,\u00a0 react supports unidirectional data flow which makes it even beter\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-15T16:21:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-19T09:04:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg\" \/>\n<meta name=\"author\" content=\"Webkul\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Webkul\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\"},\"author\":{\"name\":\"Webkul\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/14f2bcf2d2b044589b35c23a46036b02\"},\"headline\":\"Building Apps on React With Woocommerce\",\"datePublished\":\"2018-03-15T16:21:39+00:00\",\"dateModified\":\"2025-09-19T09:04:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\"},\"wordCount\":624,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg\",\"keywords\":[\"react ecommerce\",\"react js\",\"react woocommerce\"],\"articleSection\":[\"Ajax\",\"react js\",\"React Woocommerce\",\"WooCommerce\",\"WordPress\",\"Wordpress WooCommerce Salesforce Connector\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\",\"url\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\",\"name\":\"Building Apps on React Using Wordpress Woocommerce\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg\",\"datePublished\":\"2018-03-15T16:21:39+00:00\",\"dateModified\":\"2025-09-19T09:04:21+00:00\",\"description\":\"React works on Virtual DOM can\u00a0be used tocreate fast single page applications,\u00a0 react supports unidirectional data flow which makes it even beter\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg\",\"width\":1840,\"height\":1875},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building Apps on React With Woocommerce\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/14f2bcf2d2b044589b35c23a46036b02\",\"name\":\"Webkul\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b95a9889faa1ac8c620c762d0101c3a62e439d100e083ee7257caad54fa5305a?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b95a9889faa1ac8c620c762d0101c3a62e439d100e083ee7257caad54fa5305a?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Webkul\"},\"url\":\"https:\/\/webkul.com\/blog\/author\/amit098\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Apps on React Using Wordpress Woocommerce","description":"React works on Virtual DOM can\u00a0be used tocreate fast single page applications,\u00a0 react supports unidirectional data flow which makes it even beter","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/","og_locale":"en_US","og_type":"article","og_title":"Building Apps on React Using Wordpress Woocommerce","og_description":"React works on Virtual DOM can\u00a0be used tocreate fast single page applications,\u00a0 react supports unidirectional data flow which makes it even beter","og_url":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2018-03-15T16:21:39+00:00","article_modified_time":"2025-09-19T09:04:21+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg","type":"","width":"","height":""}],"author":"Webkul","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Webkul","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/"},"author":{"name":"Webkul","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/14f2bcf2d2b044589b35c23a46036b02"},"headline":"Building Apps on React With Woocommerce","datePublished":"2018-03-15T16:21:39+00:00","dateModified":"2025-09-19T09:04:21+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/"},"wordCount":624,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg","keywords":["react ecommerce","react js","react woocommerce"],"articleSection":["Ajax","react js","React Woocommerce","WooCommerce","WordPress","Wordpress WooCommerce Salesforce Connector"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/","url":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/","name":"Building Apps on React Using Wordpress Woocommerce","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg","datePublished":"2018-03-15T16:21:39+00:00","dateModified":"2025-09-19T09:04:21+00:00","description":"React works on Virtual DOM can\u00a0be used tocreate fast single page applications,\u00a0 react supports unidirectional data flow which makes it even beter","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/03\/React-App.jpg","width":1840,"height":1875},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/starting-react-with-woocommerce\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building Apps on React With Woocommerce"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/14f2bcf2d2b044589b35c23a46036b02","name":"Webkul","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b95a9889faa1ac8c620c762d0101c3a62e439d100e083ee7257caad54fa5305a?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b95a9889faa1ac8c620c762d0101c3a62e439d100e083ee7257caad54fa5305a?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Webkul"},"url":"https:\/\/webkul.com\/blog\/author\/amit098\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/109085","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/67"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=109085"}],"version-history":[{"count":36,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/109085\/revisions"}],"predecessor-version":[{"id":507017,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/109085\/revisions\/507017"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=109085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=109085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=109085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}