Skip to content

Thoughts on a hook interface and architecture #71

@chrisbolin

Description

@chrisbolin
// these are the only 4 exports (no more Detector)
import { Online, Offline, useOnline, useOnlineEffect } from "react-detect-offline";

function Demo () {
  // demo the 4 interfaces provided by react-detect-offline
  const online = useOnline({
    polling: {
      enabled: true,
      url: "https://...",
      timeout: 3000,
      interval: 8000,
    },
    // ... any other future options
  });
  useOnlineEffect(online => {
    console.log("Connection change!");
    console.log(`You are now ${online ? "online" : "offline"}`);
  }, {
    polling: false
  })
  return (
    <div className={online ? "main" : "warning"}>
      Some text
      <Online>Click to refresh</Online>
      <Offline>You are currently offline.</Offline>
    </div>
  );
}

Key points:

  • useOnlineEffect is the CORE functionality. Everything is based on it.
  • useOnline uses useOnlineEffect and useState. It returns a boolean.
  • Online and Offline work exactly as they do in v2, but under the hood use useOnline
  • no more Detector - people could just use useOnline hook*
  • no more onChange prop - people could just use useOnlineEffect*
    • for the deprecations, you could still include them, but recommend people use other things. that way ppl could still upgrade, but you wouldn't break their code.

Metadata

Metadata

Assignees

Labels

v3possible v3.0.0 features

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions