Skip to content

Cleaner slug-availability debounce pattern under react-hooks v7 #40

Description

@themightychris

Follow-up from #38 (authoring-screens).

In apps/web/src/screens/ProjectEdit.tsx, the debounced slug-availability check now sets setSlugAvailability('checking') inside the setTimeout callback rather than at the start of the effect. That's because eslint-plugin-react-hooks v7's set-state-in-effect rule flags every setState reachable from the effect body. The pattern still works, but the visual 'Checking…' indicator is delayed by the debounce (400ms) rather than appearing immediately after typing.

Options

  • Add a small useDebounce hook that owns its own state and emits a debounced value the effect can react to without setting state synchronously
  • Use useEffectEvent (still experimental) once it lands stable
  • Mark the early setSlugAvailability('checking') with a targeted eslint-disable if we decide the UX win is worth the rule exception

Either way, low-priority polish — the form is fully functional today.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions