Whether it's a good practice or not, take note of the steps.
const App = (props: any) => {...} In the .let [selection, setSelection] = useState<PaperItem[]>([]);window.debug.selection = selection;.const stateItemToFirestore = (x: StateItem) => {...}window.debug.stateItemToFirestore = stateItemToFirestore...export stateItemToFirestore.window.debug.stateItemToFirestore(window.debug.selection)window.debug.stateItemToFirestore(window.debug.selection[0])window.debug.stateItemToFirestore(window.debug.selection[0]).itemJSON.stringify(...)updateStateItem as it is exported.firestoreToStateItem.export const exportSelectedItemsAsJSON = () => {
const r = selectedItems.map((x) =>
stateItemToFirestore(x.item)
);
return JSON.stringify(r);
};
export const importItemsFromJSON = (json: string) => {
const xs = JSON.parse(json);
xs.forEach((x: object) => {
updateStateItem(null, firestoreToStateItem(x))
})
};
debug.importItemsFromJSON(debug.exportSelectedItemsAsJSON())debug.exportSelectedItemsAsJSON() breaks it.localStorage["tmp"] = debug.exportSelectedItemsAsJSON()debug.importItemsFromJSON(localStorage["tmp"])This page is auto-translated from /nishio/TypeScriptで対話的に実装 using DeepL. If you looks something interesting but the auto-translated English is not good enough to understand it, feel free to let me know at @nishio_en. I'm very happy to spread my thought to non-Japanese readers.