From 0339b7c2628597c91c8d05720e1392d4c32e77f8 Mon Sep 17 00:00:00 2001 From: Ayo Date: Mon, 17 Jul 2023 17:09:20 +0200 Subject: [PATCH] feat: use JSON script for serializing --- README.md | 12 ++++++++---- src/Serialize.astro | 2 +- src/deserialize.ts | 6 +++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ab9d626..8807e9f 100644 --- a/README.md +++ b/README.md @@ -96,13 +96,17 @@ export interface Props { ## What's happening here? -For simple applications with just a few components, this is a quick pattern to embed serialized information into your HTML. The `Serialize` component will do this for you, currently by using a hidden `textarea` element to hold the string. +This is a quick and easy pattern to embed serialized information into your HTML and make it available in the client-side script. -The `deserialize()` function can then parse the value string for use in your client script. You have to manage the IDs yourself (i.e., make sure they are unique) and understand that the `deserialize()` function will crawl the whole document incurring some performance cost. +The `Serialize` component will write the data as JSON wrapped in a ` \ No newline at end of file diff --git a/src/deserialize.ts b/src/deserialize.ts index 351721d..74154b8 100644 --- a/src/deserialize.ts +++ b/src/deserialize.ts @@ -1,8 +1,8 @@ export function deserialize(id: string): T { - const element = document.querySelector(`#${id}`); + const element = document.querySelector(`#${id}`); - if (element?.value) - return JSON.parse(element.value) + if (element?.innerText) + return JSON.parse(element.innerText) throw Error(`The call deserialize('${id}') did not find any data. Check that the following are correct: