{"id":292,"date":"2023-08-03T18:54:04","date_gmt":"2023-08-03T17:54:04","guid":{"rendered":"https:\/\/bobtimetech.net\/?page_id=292"},"modified":"2025-05-15T10:59:34","modified_gmt":"2025-05-15T14:59:34","slug":"react-dropzone-axios","status":"publish","type":"page","link":"https:\/\/bobtimetech.net\/index.php\/my-account\/react-dropzone-axios\/","title":{"rendered":"React \/ Dropzone \/ Axios"},"content":{"rendered":"\n<div class=\"wp-block-group has-background-color has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-0000dd2943b051eea65f414a0056268b is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-8a6049d4 wp-block-group-is-layout-flex\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns alignfull are-vertically-aligned-center is-not-stacked-on-mobile has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 64%,rgb(107,0,62) 94%)\">\n<div class=\"wp-block-column is-vertically-aligned-center has-background is-layout-flow wp-block-column-is-layout-flow\" style=\"background-color:#fe0606\"><div class=\"aligncenter wp-block-site-logo wp-duotone-unset-1\"><a aria-label=\"(Home link, opens in a new tab)\" target=\"_blank\" href=\"https:\/\/bobtimetech.net\/\" class=\"custom-logo-link\" rel=\"home\"><img decoding=\"async\" width=\"544\" height=\"545\" src=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png\" class=\"custom-logo\" alt=\"image of the Angel of Death standing victorious, symbolizing triumph and peace.\" srcset=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png 312w, https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel-300x300.png 300w, https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel-150x150.png 150w\" sizes=\"(max-width: 544px) 100vw, 544px\" data-attachment-id=\"4027\" data-permalink=\"https:\/\/bobtimetech.net\/one_angel\/cropped-one_angel-png\/\" data-orig-file=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png\" data-orig-size=\"312,313\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"cropped-One_Angel.png\" data-image-description=\"&lt;p&gt;BobTimeTech.net Logo. image of the Angel of Death standing victorious, symbolizing triumph and peace.&lt;\/p&gt;\n\" data-image-caption=\"\" data-large-file=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png\" \/><\/a><\/div>\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-white-color has-text-color has-large-font-size\" id=\"aioseo-the-devil-is-in-the-details\" style=\"font-style:italic;font-weight:800;text-transform:uppercase\"><em>The Devil is in the details.<\/em><\/h2>\n<\/div>\n<\/div>\n<\/div><\/div>\n<\/div>\n\n\n<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bobtimetech.net\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tReact \/ Dropzone \/ Axios\n\t\t<\/span><\/div>\n\n\n<p><strong>Install React<\/strong><\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-5f15d87a30c2379071a7883b154dd468\" id=\"aioseo-react\">React:<\/h3>\n\n\n\n<p><strong>What is React?<\/strong> React is a JavaScript library for building user interfaces. It was developed by Facebook and is widely used for building single-page applications where the UI needs to be responsive and dynamic. React allows developers to create reusable UI components, making it easier to manage and update complex user interfaces.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Key Concepts in React:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Components:<\/strong> React applications are built using components, which are self-contained, reusable pieces of code responsible for rendering a part of the UI.<\/li>\n\n\n\n<li><strong>Virtual DOM:<\/strong> React uses a virtual DOM to improve performance by updating only the parts of the actual DOM that have changed.<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Run&nbsp;npx create-react-app &lt;projectName&gt;<\/p>\n\n\n\n<p>Run cd &lt;projectName&gt;<\/p>\n\n\n\n<p>Run npm start<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Starts the development server.<\/p>\n\n\n\n<p>Integrated Terminal CTRL+C and Y to confirm to stop app<\/p>\n\n\n\n<p>&nbsp; npm run build<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Bundles the app into static files for production.<\/p>\n\n\n\n<p>&nbsp; npm test<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Starts the test runner.<\/p>\n\n\n\n<p>&nbsp; npm run eject<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Removes this tool and copies build dependencies, configuration files<\/p>\n\n\n\n<p>\u00a0\u00a0\u00a0 and scripts into the app directory. If you do this, you can\u2019t go back!<\/p>\n\n\n\n<p>npm start to run<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>NPX update Commands<\/strong><\/p>\n\n\n\n<p>npx browserslist@latest &#8211;update-db<\/p>\n\n\n\n<p>npx create-react-app \u201c.\/\u201d for current file or \u201c\/namefile\u201d<\/p>\n\n\n\n<p>Install React Router using command:<\/p>\n\n\n\n<p>npm install react-router-dom@latest<\/p>\n\n\n\n<p>To start a new Create React App project with&nbsp;<a href=\"https:\/\/www.typescriptlang.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">TypeScript<\/a>, you can run:<\/p>\n\n\n\n<p>npx create-react-app my-app &#8211;template typescript<\/p>\n\n\n\n<p>To add&nbsp;<a href=\"https:\/\/www.typescriptlang.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">TypeScript<\/a>&nbsp;to an existing Create React App project, first install it:<\/p>\n\n\n\n<p>npm install &#8211;save typescript @types\/node @types\/react @types\/react-dom @types\/jest<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Bootstrap<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/getbootstrap.com\/\">https:\/\/getbootstrap.com\/<\/a> &gt; Read the Docs<\/p>\n\n\n\n<p><a href=\"https:\/\/getbootstrap.com\/docs\/5.3\/getting-started\/introduction\/\">https:\/\/getbootstrap.com\/docs\/5.3\/getting-started\/introduction\/<\/a><\/p>\n\n\n\n<p><strong>include Bootstraps CSS and JS<\/strong><\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<pre class=\"wp-block-code\"><code>&lt;!doctype html>\n\n&lt;html lang=\"en\">\n\n\u00a0 &lt;head>\n\n\u00a0\u00a0\u00a0 &lt;meta charset=\"utf-8\">\n\n\u00a0\u00a0\u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n\u00a0\u00a0\u00a0 &lt;title>Bootstrap demo&lt;\/title>\n\n\u00a0\u00a0\u00a0 &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.2\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV\/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n\n\u00a0 &lt;\/head>\n\n\u00a0 &lt;body>\n\n\u00a0\u00a0\u00a0 &lt;h1>Hello, world!&lt;\/h1>\n\n\u00a0\u00a0\u00a0 &lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.2\/dist\/js\/bootstrap.bundle.min.js\" integrity=\"sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN\/o0jlpcV8Qyq46cDfL\" crossorigin=\"anonymous\">&lt;\/script>\n\n\u00a0 &lt;\/body>\n\n&lt;\/html><\/code><\/pre>\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:31px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><u>React Hooks<\/u><\/strong><\/p>\n\n\n\n<p><strong>useState<\/strong> -takes an&nbsp; initial value and returns a state variable and a method for updating that variable.<\/p>\n\n\n\n<p><strong>useEffect <\/strong>-adds ability to perform side effects from a function. Lets you call a function when lifecycle events happen<\/p>\n\n\n\n<p><strong><u>Rules of Hooks<\/u><\/strong><\/p>\n\n\n\n<p>Must be called at the top level (not inside loops, conditions, or nested functions).<\/p>\n\n\n\n<p>Only be called from function components.<\/p>\n\n\n\n<p>Hooks start with \u201cuse\u201d by convention. (Although not a Rule)<\/p>\n\n\n\n<p><strong>useState<\/strong><\/p>\n\n\n\n<p>import React, {useState} from \u2018react\u2019;<\/p>\n\n\n\n<p>function Example() {<\/p>\n\n\n\n<p>const [count, setCount] = useState(0);<\/p>\n\n\n\n<p>return (<\/p>\n\n\n\n<p>&lt;div&gt;<\/p>\n\n\n\n<p>&nbsp; &lt;p&gt; You clicked {count} times &lt;\/p&gt;<\/p>\n\n\n\n<p>&nbsp; &lt;button onClick={(() =&gt; setCount(count + 1)}&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Click me<\/p>\n\n\n\n<p>&nbsp;&nbsp; &lt;\/button&gt;<\/p>\n\n\n\n<p>&lt;\/div&gt;<\/p>\n\n\n\n<p>);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>useEffect<\/strong><\/p>\n\n\n\n<p>(Adds ability to perform side effects from a function component. By default, React runs effects after every render, including the first.)<\/p>\n\n\n\n<p>e.g.,<\/p>\n\n\n\n<p>function LifecycleDemo() {<\/p>\n\n\n\n<p>&nbsp;&nbsp; useEffect(() =&gt; {<\/p>\n\n\n\n<p>&nbsp;&nbsp; console.log(\u2018render!\u2019);<\/p>\n\n\n\n<p>&nbsp; return () = &gt; console.log(\u2018unmounting\u2019);<\/p>\n\n\n\n<p>&nbsp; })<\/p>\n\n\n\n<p>Return \u201cThis is a lifecycle demo\u201d;<\/p>\n\n\n\n<p>&#8212;-<\/p>\n\n\n\n<p>When does useEffect run?<\/p>\n\n\n\n<p>By default: before every render. If want to run it less often provide a 2<sup>nd<\/sup> argument<\/p>\n\n\n\n<p>*Array \/<\/p>\n\n\n\n<p>*If one of them has changed, the effect will run again.\/<\/p>\n\n\n\n<p>*Will still run after the initial render. \/<\/p>\n\n\n\n<p>*To run only on Mount (loading) and unmount (unloading), pass and empty array {[]}<\/p>\n\n\n\n<p><strong><u>Uses for useEffect<\/u><\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Fetch initial data.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Focus inputs on first render.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; re-fetching when data changes.<\/p>\n\n\n\n<p><strong>What are Hooks?<\/strong><\/p>\n\n\n\n<p>Functions that let you hook into React state and lifecycle features from function components.<\/p>\n\n\n\n<p>Hooks allow you to reuse stateful logic.<\/p>\n\n\n\n<p><strong>Custom Hooks<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A JavaScript function whose name starts with \u201cuse\u201d and that may call other Hooks.<\/li>\n\n\n\n<li>Lets you extract component logic into reusable functions.<\/li>\n\n\n\n<li>Isn\u2019t a feature of React, but is enabled by Hooks.<\/li>\n<\/ul>\n\n\n\n<p><strong>Why use Custom Hooks<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Share logic between components.<\/li>\n\n\n\n<li>Hide complex logic behind a simple interface.<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/react.dev\/reference\/react\/hooks\">React Hooks API documentation.<\/a><\/p>\n\n\n\n<p>React limits the number of renders to prevent an infinite loop.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Dropzone:<\/strong><\/p>\n\n\n\n<p><strong>What is Dropzone?<\/strong> Dropzone is a popular open-source library for handling file uploads in web applications. It provides an easy and customizable way to allow users to drag and drop files into an area, or select files using a file dialog.<\/p>\n\n\n\n<p><strong>Key Features of Dropzone:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Drag-and-Drop:<\/strong> Users can drag files from their computer and drop them onto a designated area in the web application.<\/li>\n\n\n\n<li><strong>File Input:<\/strong> Users can also use a file input dialog to select files for upload.<\/li>\n\n\n\n<li><strong>Preview:<\/strong> Dropzone often includes a file preview feature, allowing users to see a thumbnail or other information about the files they have selected.<\/li>\n<\/ol>\n\n\n\n<p>To add\/attach files to web app.<\/p>\n\n\n\n<p>url: <a href=\"https:\/\/github.com\/react-dropzone\/react-dropzone\">https:\/\/github.com\/react-dropzone\/react-dropzone<\/a><\/p>\n\n\n\n<p>install:   npm install \u2013save react-dropzone&nbsp; &lt;-command<\/p>\n\n\n\n<div style=\"height:31px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong>Axios<\/strong><\/p>\n\n\n\n<p><strong>What is Axios?<\/strong> Axios is a popular JavaScript library for making HTTP requests. It can be used both in the browser and in Node.js environments. Axios simplifies the process of making asynchronous HTTP requests and handling responses.<\/p>\n\n\n\n<p><strong>Key Features of Axios:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Promise-based:<\/strong> Axios uses promises, making it easy to handle asynchronous operations and providing a clean syntax for chaining actions after the request is complete.<\/li>\n\n\n\n<li><strong>Interceptors:<\/strong> Axios allows you to intercept requests or responses before they are handled by <code>then<\/code> or <code>catch<\/code>. This is useful for tasks like adding headers to requests or handling errors globally.<\/li>\n\n\n\n<li><strong>Support for JSON Data:<\/strong> Axios automatically parses JSON responses, making it convenient when working with APIs that return JSON data.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-c0b6032f6edad147262eeeff28c92382\" id=\"aioseo-integration\">Integration:<\/h3>\n\n\n\n<p>In a React application, you might use Dropzone to handle file uploads within a specific component. When a user interacts with Dropzone to select or drop files, you can use Axios to send those files to a server for processing (e.g., storing in a database or performing some other server-side operation). Axios helps make the HTTP request to the server to handle the file upload, and you can use React state and lifecycle methods to manage the UI and handle the response from the server.<\/p>\n\n\n\n<p>Allows to send html requests to the backend.<\/p>\n\n\n\n<p>Cd inside project: project\/src\/main\/frontend<\/p>\n\n\n\n<p>npm -S i axios&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;-command to install axios \u201ci\u201d means install<\/p>\n\n\n\n<p>To download the axios library in VS code.<\/p>\n\n\n\n<p>Add IMPORTS to App.js:<\/p>\n\n\n\n<p>Import Reach, {useState, useEffect} from \u201creact\u201d;<\/p>\n\n\n\n<p>Import axios from \u201caxios\u201d;<\/p>\n\n\n\n<div style=\"height:46px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Here&#8217;s a simplified example of how you might use Dropzone and Axios together in a React component:<\/p>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background:linear-gradient(135deg,rgb(238,238,238) 100%,rgb(169,184,195) 100%)\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<pre class=\"wp-block-code\"><code>import React, { useState } from 'react';\nimport Dropzone from 'react-dropzone';\nimport axios from 'axios';\nimport 'react-dropzone-uploader\/dist\/styles.css'; \/\/ Add this line if you're using react-dropzone-uploader\n\n\/\/ Add any additional import statements for styling or other dependencies you may have\n\n\nconst FileUploadComponent = () =&gt; {\n  const &#91;uploadedFiles, setUploadedFiles] = useState(&#91;]);\n\n  const onDrop = async (acceptedFiles) =&gt; {\n    const formData = new FormData();\n    acceptedFiles.forEach((file) =&gt; {\n      formData.append('files', file);\n    });\n\n    try {\n      const response = await axios.post('\/upload', formData);\n      console.log('Server Response:', response.data);\n\n      \/\/ Update state with the uploaded files\n      setUploadedFiles(&#91;...uploadedFiles, ...response.data.files]);\n    } catch (error) {\n      console.error('Error uploading files:', error);\n    }\n  };\n\n  return (\n    &lt;div&gt;\n      &lt;Dropzone onDrop={onDrop}&gt;\n        {({ getRootProps, getInputProps }) =&gt; (\n          &lt;div {...getRootProps()}&gt;\n            &lt;input {...getInputProps()} \/&gt;\n            &lt;p&gt;Drag and drop files here, or click to select files&lt;\/p&gt;\n          &lt;\/div&gt;\n        )}\n      &lt;\/Dropzone&gt;\n\n      {\/* Display a list of uploaded files *\/}\n      &lt;ul&gt;\n        {uploadedFiles.map((file, index) =&gt; (\n          &lt;li key={index}&gt;{file.name}&lt;\/li&gt;\n        ))}\n      &lt;\/ul&gt;\n    &lt;\/div&gt;\n  );\n};\n\nexport default FileUploadComponent;\n<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<div style=\"height:31px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group has-white-color has-black-background-color has-text-color has-background has-small-font-size\" style=\"min-height:40vh;margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--60);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--50)\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-ec5833f3 wp-block-group-is-layout-constrained\"><div style=\"margin-bottom:6px;\" class=\"aligncenter wp-block-site-logo\"><a href=\"https:\/\/bobtimetech.net\/\" class=\"custom-logo-link\" rel=\"home\"><img decoding=\"async\" width=\"490\" height=\"491\" src=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png\" class=\"custom-logo\" alt=\"image of the Angel of Death standing victorious, symbolizing triumph and peace.\" srcset=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png 312w, https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel-300x300.png 300w, https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel-150x150.png 150w\" sizes=\"(max-width: 490px) 100vw, 490px\" data-attachment-id=\"4027\" data-permalink=\"https:\/\/bobtimetech.net\/one_angel\/cropped-one_angel-png\/\" data-orig-file=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png\" data-orig-size=\"312,313\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"cropped-One_Angel.png\" data-image-description=\"&lt;p&gt;BobTimeTech.net Logo. image of the Angel of Death standing victorious, symbolizing triumph and peace.&lt;\/p&gt;\n\" data-image-caption=\"\" data-large-file=\"https:\/\/bobtimetech.net\/wp-content\/uploads\/2024\/10\/cropped-One_Angel.png\" \/><\/a><\/div>\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#fb0606\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-center has-medium-font-size\">Proudly powered by <a href=\"https:\/\/wordpress.org\" target=\"_blank\" rel=\"noopener\" title=\"\">WordPress<\/a><\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group has-header-gradient-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<ul class=\"wp-block-social-links aligncenter has-large-icon-size is-style-logos-only is-nowrap is-layout-flex wp-container-core-social-links-is-layout-65900438 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/in\/robert-t-hogan-619806a4\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCuIiXVv392sbxvaUEnJVNaA\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-mail  wp-block-social-link\"><a href=\"mailto:&#098;obt&#105;me&#116;e&#099;&#104;&#064;gm&#097;&#105;l&#046;&#099;o&#109;\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19,5H5c-1.1,0-2,.9-2,2v10c0,1.1.9,2,2,2h14c1.1,0,2-.9,2-2V7c0-1.1-.9-2-2-2zm.5,12c0,.3-.2.5-.5.5H5c-.3,0-.5-.2-.5-.5V9.8l7.5,5.6,7.5-5.6V17zm0-9.1L12,13.6,4.5,7.9V7c0-.3.2-.5.5-.5h14c.3,0,.5.2.5.5v.9z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Mail<\/span><\/a><\/li><\/ul>\n<\/div><\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Devil is in the details. Install React React: What is React? React is a JavaScript library for building user interfaces. It was developed by Facebook and is widely used for building single-page applications where the UI needs to be responsive and dynamic. React allows developers to create reusable UI [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":8,"menu_order":7,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_themeisle_gutenberg_block_has_review":false,"jetpack_post_was_ever_published":false,"footnotes":""},"class_list":["post-292","page","type-page","status-publish","hentry"],"aioseo_notices":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/pages\/292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/comments?post=292"}],"version-history":[{"count":1,"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/pages\/292\/revisions"}],"predecessor-version":[{"id":4150,"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/pages\/292\/revisions\/4150"}],"up":[{"embeddable":true,"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/pages\/8"}],"wp:attachment":[{"href":"https:\/\/bobtimetech.net\/index.php\/wp-json\/wp\/v2\/media?parent=292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}