This library has been rebranded as YuuState.
Existing functionality and APIs remain unchanged. Please use the new package name for all future installations and imports.
Docs
Mutation Guides

Mutation Guides

Mutations are used to perform write operations—such as creating, updating, or deleting data.

FloppyDisk provides two ways to use mutations:

  • Global mutation → shared state across components
  • Local mutation → isolated per component

Global Mutation

Create a global mutation using createMutation:

import { createMutation } from "floppy-disk/react";
 
const useUpdatePlant = createMutation(updatePlant, {
  onSuccess: (data) => {
    console.log("Global success:", data);
  },
});

Use it inside any component:

function UpdateButton() {
  const { isPending } = useUpdatePlant();
 
  return (
    <button
      disabled={isPending}
      onClick={() => {
        useUpdatePlant.execute({ id: 1, name: "Sunflower", hp: 300 });
      }}
    >
      Update Plant
    </button>
  );
}

Characteristics:

  • Shared across all components
  • Single source of truth for mutation state
  • Can be triggered from anywhere using .execute()
  • Useful for global actions (e.g. forms, shared actions)

Local Mutation

Create a local mutation using useMutation:

import { useMutation } from "floppy-disk/react";
 
function UpdateForm() {
  const [result, { execute }] = useMutation(updateZombie, {
    onSuccess: (data) => {
      console.log("Local success:", data);
    },
  });
 
  return (
    <div>
      <button
        disabled={result.isPending}
        onClick={() => {
          execute({ id: 27, name: "Gargantuar", hp: 3000 });
        }}
      >
        Submit
      </button>
 
      {result.isError && <div>Error occurred</div>}
    </div>
  );
}

Characteristics:

  • Isolated per component instance
  • Each usage has its own state
  • No shared side effects
  • Ideal for component-scoped interactions

Execution

Both global and local mutations:

  • Execute via execute(input)
  • Return a Promise that never throw.
    It returns { variable: TVariable; data?: TData; error?: TError } instead.
  • Update state automatically (isPending, isSuccess, isError, etc.)