{"id":8396,"date":"2025-01-09T19:21:03","date_gmt":"2025-01-09T13:51:03","guid":{"rendered":"https:\/\/innovationm.co\/?p=8396"},"modified":"2025-01-09T19:21:03","modified_gmt":"2025-01-09T13:51:03","slug":"new-hooks-in-react19","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/","title":{"rendered":"New Hooks in React19"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>In this blog, we&#8217;ll explore new hooks introduced in React 19&#8217;s that will help you to keep your codebase clean and manageable . Get ready to dive into a world of possibilities with React&#8217;s latest evolution!<\/p>\n<p><b>1.UseActionState<\/b><\/p>\n<p><span style=\"font-weight: 400;\">React 19 introduces a new hook, <\/span><span style=\"font-weight: 400;\">useActionState<\/span><span style=\"font-weight: 400;\">, designed to simplify handling state updates for Actions. This hook streamlines common patterns, especially for asynchronous operations, by automatically managing the state of an Action and its results.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Here\u2019s how it works: <\/span><span style=\"font-weight: 400;\">useActionState<\/span><span style=\"font-weight: 400;\"> accepts an Action function and an initial state. It returns an array containing the current state (such as errors or success messages), a wrapped Action function for triggering the operation, and the pending state of the Action.<\/span><\/p>\n<pre>\r\n\r\n\r\nimport React from 'react';\r\nfunction MyComponent() {\r\nconst [result, executeAction, isLoading] = useActionState(\r\nasync (previousResult, inputData) =&gt; {\r\ntry {\r\nconst response = await apiCall(inputData);\r\nreturn response.success ? null : response.error;\r\n} catch (error) {\r\nreturn error.message;\r\n}\r\n},\r\nnull\r\n);\r\n\r\nreturn (\r\n&lt;div&gt;\r\n&lt;button onClick={() =&gt; executeAction('newData')} disabled={isLoading}&gt;\r\n{isLoading ? 'Loading...' : 'Submit'}\r\n&lt;\/button&gt;\r\n{result &amp;&amp; &lt;p&gt;Error: {result}&lt;\/p&gt;}\r\n&lt;\/div&gt;\r\n);\r\n}<\/pre>\n<p><strong>2. useFormStatus<\/strong><br \/>\nReact 19 introduces a convenient new hook, useFormStatus, which allows components to access the status of their parent &lt;form&gt; without relying on prop drilling. This simplifies scenarios where design components, like buttons, need to react to the form&#8217;s state, such as when it\u2019s submitting.<\/p>\n<p>Instead of manually passing state through props or using a custom context, useFormStatus behaves as if the &lt;form&gt; is providing this information via Context.<\/p>\n<p>&nbsp;<\/p>\n<pre>\r\n\r\nimport React from 'react';\r\nimport { useFormStatus } from 'react-dom';\r\n\r\nfunction SubmitButton() {\r\nconst { pending } = useFormStatus();\r\n\r\nreturn (\r\n&lt;button type=\"submit\" disabled={pending}&gt;\r\n{pending ? 'Submitting...' : 'Submit'}\r\n&lt;\/button&gt;\r\n);\r\n}\r\n\r\nexport default function MyForm() {\r\nconst handleSubmit = (event) =&gt; {\r\nevent.preventDefault();\r\nconsole.log('Form submitted');\r\n};\r\n\r\nreturn (\r\n&lt;form onSubmit={handleSubmit}&gt;\r\n&lt;input type=\"text\" placeholder=\"Enter your name\" required \/&gt;\r\n&lt;SubmitButton \/&gt;\r\n&lt;\/form&gt;\r\n);\r\n}\r\n\r\n<\/pre>\n<p><strong>3. useOptimistic<\/strong><\/p>\n<p>React 19 introduces the useOptimistic hook to simplify handling optimistic updates\u2014a common pattern where the UI displays the expected final state of data during an asynchronous operation. With useOptimistic, React ensures a seamless transition between the optimistic state and the final resolved state.<\/p>\n<p><strong>How It Works?<br \/>\n<\/strong><br \/>\n<strong>Optimistic Updates:<\/strong> The hook lets you temporarily update the UI to reflect the expected changes.<br \/>\n<strong>Automatic Reconciliation:<\/strong> Once the async operation completes or fails, the state reverts or updates to match the actual result.<\/p>\n<pre>\r\nimport React from 'react';\r\n\r\nfunction ChangeName({ currentName, onUpdateName }) {\r\nconst [optimisticName, setOptimisticName] = useOptimistic(currentName);\r\n\r\nconst handleSubmit = async (event) =&gt; {\r\nevent.preventDefault();\r\nconst formData = new FormData(event.target);\r\nconst newName = formData.get('name');\r\nsetOptimisticName(newName);\r\n\r\ntry {\r\nconst updatedName = await updateName(newName); \r\nonUpdateName(updatedName);\r\n} catch (error) {\r\nconsole.error('Failed to update name:', error);\r\n}\r\n};\r\n\r\nreturn (\r\n&lt;form onSubmit={handleSubmit}&gt;\r\n&lt;p&gt;Your name is: {optimisticName}&lt;\/p&gt;\r\n&lt;label&gt;\r\nChange Name:\r\n&lt;input\r\ntype=\"text\"\r\nname=\"name\"\r\ndisabled={currentName !== optimisticName}\r\n\/&gt;\r\n&lt;\/label&gt;\r\n&lt;button type=\"submit\"&gt;Update&lt;\/button&gt;\r\n&lt;\/form&gt;\r\n);\r\n\r\nasync function updateName(name) {\r\nreturn new Promise((resolve) =&gt; setTimeout(() =&gt; resolve(name), 1000));\r\n}\r\n\r\nexport default ChangeName;\r\n\r\n\r\n<\/pre>\n<ol start=\"4\">\n<li><b> use<\/b><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">React 19 introduces the <\/span><span style=\"font-weight: 400;\">use<\/span><span style=\"font-weight: 400;\"> API, a powerful new tool for handling asynchronous resources during rendering. With <\/span><span style=\"font-weight: 400;\">use<\/span><span style=\"font-weight: 400;\">, you can read a promise directly in your component, and React will automatically suspend rendering until the promise resolves. This integration simplifies asynchronous data handling by leveraging React&#8217;s built-in Suspense mechanism.<\/span><\/p>\n<h3><b>How It Works:<\/b><\/h3>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Suspension on Promise<\/b><span style=\"font-weight: 400;\">: When <\/span><span style=\"font-weight: 400;\">use<\/span><span style=\"font-weight: 400;\"> encounters a promise, it pauses rendering of the component until the promise is resolved.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b style=\"font-size: 1rem;\">Fallback UI<\/b><span style=\"font-weight: 400;\">: While the promise is pending, React displays a fallback UI defined in a Suspense boundary.<\/span><\/li>\n<\/ol>\n<pre>async function fetchComments() {\r\nreturn new Promise((resolve) =&gt;\r\nsetTimeout(() =&gt; resolve(['Great post!', 'Thanks for sharing!', 'Nice read!']), 2000)\r\n);\r\n}\r\n\r\nfunction Comments({ commentsPromise }) {\r\nconst comments = use(commentsPromise);\r\n\r\nreturn (\r\n&lt;div&gt;\r\n{comments.map((comment, index) =&gt; (\r\n&lt;p key={index}&gt;{comment}&lt;\/p&gt;\r\n))}\r\n&lt;\/div&gt;\r\n);\r\n}\r\n\r\nfunction Page() {\r\nconst commentsPromise = fetchComments();\r\n\r\nreturn (\r\n&lt;Suspense fallback={&lt;div&gt;Loading comments...&lt;\/div&gt;}&gt;\r\n&lt;Comments commentsPromise={commentsPromise} \/&gt;\r\n&lt;\/Suspense&gt;\r\n);\r\n}<\/pre>\n<p>export default Page;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; In this blog, we&#8217;ll explore new hooks introduced in React 19&#8217;s that will help you to keep your codebase clean and manageable . Get ready to dive into a world of possibilities with React&#8217;s latest evolution! 1.UseActionState React 19 introduces a new hook, useActionState, designed to simplify handling state updates for Actions. This hook [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":8397,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[989,1038,966,1016],"tags":[1203,1202,1191,1190,1195,1197,1205,1198,1201,1200,1199,1196,1204,1192,1193,1194],"class_list":["post-8396","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend","category-software-development-best-practices","category-software-engineering","category-tech-tips-and-tutorials","tag-asynchronous-resources-in-react","tag-handling-state-in-react","tag-new-react-hooks","tag-react-19","tag-react-19-hooks","tag-react-asynchronous-updates","tag-react-blog-2025","tag-react-form-management","tag-react-hooks-tutorial","tag-react-optimizations","tag-react-state-management","tag-react-suspense","tag-react-ui-updates","tag-useactionstate","tag-useformstatus","tag-useoptimistic"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>New Hooks in React19 - InnovationM - Blog<\/title>\n<meta name=\"description\" content=\"Explore the groundbreaking new hooks introduced in React 19, including useActionState, useFormStatus, useOptimistic, and use. Learn how these features streamline state management, form handling, and asynchronous operations, making your code cleaner and more efficient. Dive into React&#039;s latest evolution!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New Hooks in React19 - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"Explore the groundbreaking new hooks introduced in React 19, including useActionState, useFormStatus, useOptimistic, and use. Learn how these features streamline state management, form handling, and asynchronous operations, making your code cleaner and more efficient. Dive into React&#039;s latest evolution!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-09T13:51:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2025\/01\/New-Hooks-in-React19-1024x576.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"New Hooks in React19\",\"datePublished\":\"2025-01-09T13:51:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/\"},\"wordCount\":368,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/New-Hooks-in-React19.png\",\"keywords\":[\"asynchronous resources in React\",\"handling state in React\",\"new React hooks\",\"React 19\",\"React 19 hooks\",\"React asynchronous updates\",\"React blog 2025.\",\"React form management\",\"React hooks tutorial\",\"React optimizations\",\"React state management\",\"React Suspense\",\"React UI updates\",\"useActionState\",\"useFormStatus\",\"useOptimistic\"],\"articleSection\":[\"frontend\",\"Software Development Best Practices\",\"Software Engineering\",\"Tech Tips and Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/\",\"name\":\"New Hooks in React19 - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/New-Hooks-in-React19.png\",\"datePublished\":\"2025-01-09T13:51:03+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"description\":\"Explore the groundbreaking new hooks introduced in React 19, including useActionState, useFormStatus, useOptimistic, and use. Learn how these features streamline state management, form handling, and asynchronous operations, making your code cleaner and more efficient. Dive into React's latest evolution!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/New-Hooks-in-React19.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/New-Hooks-in-React19.png\",\"width\":2240,\"height\":1260},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/new-hooks-in-react19\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New Hooks in React19\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New Hooks in React19 - InnovationM - Blog","description":"Explore the groundbreaking new hooks introduced in React 19, including useActionState, useFormStatus, useOptimistic, and use. Learn how these features streamline state management, form handling, and asynchronous operations, making your code cleaner and more efficient. Dive into React's latest evolution!","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:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/","og_locale":"en_US","og_type":"article","og_title":"New Hooks in React19 - InnovationM - Blog","og_description":"Explore the groundbreaking new hooks introduced in React 19, including useActionState, useFormStatus, useOptimistic, and use. Learn how these features streamline state management, form handling, and asynchronous operations, making your code cleaner and more efficient. Dive into React's latest evolution!","og_url":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/","og_site_name":"InnovationM - Blog","article_published_time":"2025-01-09T13:51:03+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2025\/01\/New-Hooks-in-React19-1024x576.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"New Hooks in React19","datePublished":"2025-01-09T13:51:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/"},"wordCount":368,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2025\/01\/New-Hooks-in-React19.png","keywords":["asynchronous resources in React","handling state in React","new React hooks","React 19","React 19 hooks","React asynchronous updates","React blog 2025.","React form management","React hooks tutorial","React optimizations","React state management","React Suspense","React UI updates","useActionState","useFormStatus","useOptimistic"],"articleSection":["frontend","Software Development Best Practices","Software Engineering","Tech Tips and Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/","url":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/","name":"New Hooks in React19 - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2025\/01\/New-Hooks-in-React19.png","datePublished":"2025-01-09T13:51:03+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"description":"Explore the groundbreaking new hooks introduced in React 19, including useActionState, useFormStatus, useOptimistic, and use. Learn how these features streamline state management, form handling, and asynchronous operations, making your code cleaner and more efficient. Dive into React's latest evolution!","breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2025\/01\/New-Hooks-in-React19.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2025\/01\/New-Hooks-in-React19.png","width":2240,"height":1260},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/new-hooks-in-react19\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"New Hooks in React19"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/8396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=8396"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/8396\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/8397"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=8396"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=8396"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=8396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}