reactive object diffing
currently supports: react, svelte & vue
import { diffable } from "diffable";
const { draft, modified } = diffable({
name: "John",
age: 30,
});
draft.age = 31;
console.log(modified); // { age: 31 }(the example is simplified, see below for framework specific usage)
npm i diffable
<script lang="ts">
import { diffable } from "diffable/svelte";
const form = diffable({
name: "John",
age: 30,
});
</script>
<input bind:value={form.draft.name} />
<input bind:value={form.draft.age} type="number" /><script setup>
import { diffable } from "diffable/vue";
const { draft, modified } = diffable({
name: "John",
age: 30,
});
</script>
<template>
<div>
<input v-model="draft.name" />
<input v-model="draft.age" type="number" />
</div>
</template>i know this isnt ideal, i am working on a better api for react
import { diffable } from "diffable/react";
function App() {
const { draft, setDraft, modified } = diffable({
name: "John",
age: 30,
});
return (
<div>
<input
value={draft.name}
onChange={(e) => setDraft({ ...draft, name: e.target.value })}
/>
<input
value={draft.age}
type="number"
onChange={(e) => setDraft({ ...draft, age: e.target.value })}
/>
</div>
);
}