{"id":14874,"date":"2024-01-08T17:45:12","date_gmt":"2024-01-08T15:45:12","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=14874"},"modified":"2024-01-08T19:31:36","modified_gmt":"2024-01-08T17:31:36","slug":"usestate-persistente-en-react-ejemplo-de-un-hook-personalizado","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/","title":{"rendered":"useState() persistente en React &#8211; ejemplo de un hook personalizado"},"content":{"rendered":"<p>Cuando creamos una aplicaci\u00f3n en React podemos tener la informaci\u00f3n necesaria para trabajar en diferentes lugares. Por ejemplo, si usamos Redux, es frecuente tener el grueso de la informaci\u00f3n en uno o varios Stores. Pero, existe otro tipo de informaci\u00f3n que por su naturaleza nos puede resultar mas adecuado gestionarla usando <strong>React Context<\/strong>. Por ejemplo, el idioma por defecto del usuario o si quiere ver la aplicaci\u00f3n con colores claros u oscuros. Si queremos que la informaci\u00f3n del contexto sea variable (manipulable) es necesario almacenarla en el estado de alg\u00fan componente (normalmente el componente App). <strong>El problema es que los componentes pierden su estado si la p\u00e1gina Web se recarga, y por lo tanto nuestro contexto variable tambi\u00e9n se pierde.<\/strong> En este art\u00edculo veremos como crear <strong>un useState() con persistencia<\/strong> usando un <a href=\"https:\/\/www.espai.es\/blog\/2023\/09\/hooks-personalizados-en-react\/\">hook personalizado<\/a>, de forma que <strong>al recargar la p\u00e1gina su estado se recupere autom\u00e1ticamente.<\/strong><\/p>\n<h2>React Context y el problema de la persistencia<\/h2>\n<p><strong>React Context<\/strong> nos permite que cierta informaci\u00f3n sea <strong>accesible desde cualquier componente<\/strong> sin necesidad de pasar dicha informaci\u00f3n de padres a hijos mediante propiedades, ni nada parecido.<\/p>\n<p>Adem\u00e1s, dicha informaci\u00f3n puede ser modificable simplemente guard\u00e1ndola en el estado de nuestra aplicaci\u00f3n. El problema es que si el usuario recarga la p\u00e1gina pulsado F5 o d\u00e1ndole al botoncito de recargar, dicha informaci\u00f3n se pierde, y por lo tanto el contexto se reinicia.<\/p>\n<p>Aunque es factible volver a cargar dicha informaci\u00f3n (por ejemplo, desde la base de datos del servidor), no deja de ser un fastidio que algo tan aparentemente intranscendente como recargar la p\u00e1gina nos complique el dise\u00f1o de nuestra aplicaci\u00f3n React.<\/p>\n<p>Todo esto se resolver\u00eda f\u00e1cilmente si simplemente tuvi\u00e9ramos <strong>un useState() que fuera capaz de guardar la informaci\u00f3n sin perderla al recargarse la p\u00e1gina.<\/strong><\/p>\n<h2>Un hook personalizado para un useState() persistente<\/h2>\n<p>A continuaci\u00f3n tienes el c\u00f3digo de ejemplo de un sencillo hook personalizado que simplemente hace lo mismo que el useState(), pero <strong>guarda adem\u00e1s la informaci\u00f3n en el localStorage del navegador del usuario<\/strong>, de forma que si se recarga la p\u00e1gina, dicha informaci\u00f3n se recupera del localStorage automaticamente.<\/p>\n<pre>import { useState, useEffect } from \"react\";\r\n\r\nexport function useLocalStorageState(nombre, estado) {\r\n  const [state, setData] = useState(estado);\r\n  const obj = (typeof(estado) == \"object\");\r\n\r\n  const setState = (estado) =&gt; {\r\n    setData(estado);\r\n    if (obj) \r\n    \t\tlocalStorage.setItem(nombre, JSON.stringify(estado));\r\n   \telse\r\n   \t\tlocalStorage.setItem(nombre, estado);\r\n  }\r\n\r\n  useEffect(() =&gt; {\r\n    let fromLS = localStorage.getItem(nombre);\r\n    if (fromLS) {\r\n    \tif (obj) \r\n    \t\tsetData(JSON.parse(fromLS));\r\n    \telse\r\n    \t\tsetData(fromLS);\r\n    } \r\n  }, [state]);\r\n\r\n  return [ state, setState ];\r\n}\r\n<\/pre>\n<p>Guarda este c\u00f3digo en un archivo llamado, por ejemplo, <strong>useLocalStorageState.jsx<\/strong>, y despu\u00e9s en tu App.js imp\u00f3rtalo:<\/p>\n<pre>import { useLocalStorageState } from '.\/useLocalStorageState'\r\n<\/pre>\n<p>Y despu\u00e9s tan solo tienes que usarlo en lugar de usar el useState() para crear el estado que quieres compartir en tu React Context. La \u00fanica diferencia es que en este caso <strong>el primer par\u00e1metro es el nombre que quieres darle a la informaci\u00f3n<\/strong> ya que es el nombre con el que se guardar\u00e1 en el localStorage. El segundo par\u00e1metro es simplemente el estado deseado, al igual que sucede con useState().<\/p>\n<pre>const [idioma, setIdioma] = useLocalStorageState(\"idioma-usuario\", \"es\");\r\n<\/pre>\n<p>Como el <strong>useState()<\/strong> que necesitamos pertenece a la aplicaci\u00f3n, podemos estar seguros que <strong>va a ser un \u00fanico componente el que haga uso de este hook<\/strong>. Si no es tu caso, y quieres usar este hook en varios componentes de tu aplicaci\u00f3n, aseg\u00farate que el primer par\u00e1metro es diferente para cada componente, para que los estados de los diferentes componentes se guarden con diferente nombre en el localStorage.<\/p>\n<p>Y nada m\u00e1s, espero que est\u00e9 c\u00f3digo de ejemplo os resulte interesante.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando creamos una aplicaci\u00f3n en React podemos tener la informaci\u00f3n necesaria para trabajar en diferentes lugares. Por ejemplo, si usamos Redux, es frecuente tener el grueso de la informaci\u00f3n en uno o varios Stores. Pero, existe otro tipo de informaci\u00f3n que por su naturaleza nos&#8230;<\/p>\n","protected":false},"author":23,"featured_media":14882,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_ef_editorial_meta_date_first-draft-date":"","_ef_editorial_meta_paragraph_assignment":"","_ef_editorial_meta_checkbox_needs-photo":"","_ef_editorial_meta_number_word-count":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[7,5],"tags":[857,469],"class_list":["post-14874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-web","category-programacion","tag-hooks","tag-reactjs"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>useState() persistente en React - ejemplo de un hook personalizado - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"En este art\u00edculo veremos como crear un useState() con persistencia para no perder el estado cuando se recarga la p\u00e1gina Web.\" \/>\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.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"useState() persistente en React - ejemplo de un hook personalizado - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"En este art\u00edculo veremos como crear un useState() con persistencia para no perder el estado cuando se recarga la p\u00e1gina Web.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-08T15:45:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-08T17:31:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Abel Camarena\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Abel Camarena\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/\"},\"author\":{\"name\":\"Abel Camarena\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"headline\":\"useState() persistente en React &#8211; ejemplo de un hook personalizado\",\"datePublished\":\"2024-01-08T15:45:12+00:00\",\"dateModified\":\"2024-01-08T17:31:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/\"},\"wordCount\":570,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg\",\"keywords\":[\"hooks\",\"reactjs\"],\"articleSection\":[\"Dise\u00f1o Web\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/\",\"name\":\"useState() persistente en React - ejemplo de un hook personalizado - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg\",\"datePublished\":\"2024-01-08T15:45:12+00:00\",\"dateModified\":\"2024-01-08T17:31:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"description\":\"En este art\u00edculo veremos como crear un useState() con persistencia para no perder el estado cuando se recarga la p\u00e1gina Web.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg\",\"width\":1000,\"height\":500,\"caption\":\"useState() con persistencia\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"useState() persistente en React &#8211; ejemplo de un hook personalizado\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.espai.es\/blog\/#website\",\"url\":\"https:\/\/www.espai.es\/blog\/\",\"name\":\"Blog Escola Espai\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.espai.es\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\",\"name\":\"Abel Camarena\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"caption\":\"Abel Camarena\"},\"sameAs\":[\"http:\/\/www.espai.es\"],\"url\":\"https:\/\/www.espai.es\/blog\/author\/abel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"useState() persistente en React - ejemplo de un hook personalizado - Blog Escola Espai","description":"En este art\u00edculo veremos como crear un useState() con persistencia para no perder el estado cuando se recarga la p\u00e1gina Web.","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.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/","og_locale":"es_ES","og_type":"article","og_title":"useState() persistente en React - ejemplo de un hook personalizado - Blog Escola Espai","og_description":"En este art\u00edculo veremos como crear un useState() con persistencia para no perder el estado cuando se recarga la p\u00e1gina Web.","og_url":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/","og_site_name":"Blog Escola Espai","article_published_time":"2024-01-08T15:45:12+00:00","article_modified_time":"2024-01-08T17:31:36+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg","type":"image\/jpeg"}],"author":"Abel Camarena","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Abel Camarena","Tiempo de lectura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/"},"author":{"name":"Abel Camarena","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"headline":"useState() persistente en React &#8211; ejemplo de un hook personalizado","datePublished":"2024-01-08T15:45:12+00:00","dateModified":"2024-01-08T17:31:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/"},"wordCount":570,"commentCount":0,"image":{"@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg","keywords":["hooks","reactjs"],"articleSection":["Dise\u00f1o Web","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/","url":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/","name":"useState() persistente en React - ejemplo de un hook personalizado - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg","datePublished":"2024-01-08T15:45:12+00:00","dateModified":"2024-01-08T17:31:36+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"description":"En este art\u00edculo veremos como crear un useState() con persistencia para no perder el estado cuando se recarga la p\u00e1gina Web.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg","width":1000,"height":500,"caption":"useState() con persistencia"},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2024\/01\/usestate-persistente-en-react-ejemplo-de-un-hook-personalizado\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"useState() persistente en React &#8211; ejemplo de un hook personalizado"}]},{"@type":"WebSite","@id":"https:\/\/www.espai.es\/blog\/#website","url":"https:\/\/www.espai.es\/blog\/","name":"Blog Escola Espai","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.espai.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897","name":"Abel Camarena","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","caption":"Abel Camarena"},"sameAs":["http:\/\/www.espai.es"],"url":"https:\/\/www.espai.es\/blog\/author\/abel\/"}]}},"jetpack_featured_media_url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2024\/01\/logo.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/14874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/comments?post=14874"}],"version-history":[{"count":7,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/14874\/revisions"}],"predecessor-version":[{"id":14876,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/14874\/revisions\/14876"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/14882"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=14874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=14874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=14874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}