SyncState

SyncState

  • Docs
  • FAQ
  • Github
  • Hire The Creators

›Tips & Tricks

Introduction

  • Getting started
  • Installation
  • Motivation
  • Core Concepts

Recipes

  • Recipes

Examples

  • Counter
  • Counter with Undo / Redo
  • Todo app
  • Multi User Counter
  • Multi User Todo
  • Multi User Todo With Undo/Redo

Plugins

  • History
  • Remote

API Reference

  • API Overview
  • createDocStore
  • Store
  • Provider
  • useDoc
  • useSyncState

Tips & Tricks

  • Common Pitfalls & Best Practices
  • Using SyncState without React
  • Performance Tuning

FAQ

  • FAQ's

Common Pitfalls & Best Practices

When to use SyncState?

You can use SyncState for general purpose state management. It only helps to adopt realtime and multi-user functionalities at a later stage.

It's well suited for document based multiuser apps like Google Docs and Figma.

useDoc vs store.useDoc

Keep in mind that useDoc hook, in addition to fetching the state and setter function, manages the reactivity for your component.

Do not confuse the hook with the method store.useDoc. This method is the same as useDoc hook except for reactivity. If you are not using React, you can use store.observe method to subscribe to changes in the document.

depth in useDoc, observe and intercept

The depth argument in useDoc, observe and intercept lets you define the reactivity to different levels of path.

For example, consider the following store

const store = createDocStore({ app: { todos: [] } });

If your component uses useDoc("/app/todos", 0), depth is 0 which means only "/app" and "/app/todos" will trigger an update.

Depth means chunks of path beyond the ones passed to useDoc. Here, if a patch is generated with path "/app/todos/0", this will have depth 1 compared to path "/app/todos" while "/app" has depth -1 and "/app/todos" has depth 0.

So when you pass a depth argument to useDoc, observe or intercept, it means that the listener should be triggered for any patch with depth up to the passed argument (In the above case, depth -1 and 0). We do this because path "/app" means that the value at rootState.app is being changed and that will also change todos inside app. So you have to be careful about the state you are updating. Only update the part of state which is necessary.

For the above example useDoc("/app/todos", 0), we will list the patches which will trigger an update for each depth

0: "/app", "/app/todos"

1: "/app", "/app/todos", "/app/todos/0", "/app/todos/1", ...

2: "/app", "/app/todos", "/app/todos/0", "/app/todos/0/caption", ...

If you pass Infinity as depth, it will trigger an update for the matching paths with any depth.

← useSyncStateUsing SyncState without React →
  • When to use SyncState?
  • useDoc vs store.useDoc
  • depth in useDoc, observe and intercept
Docs
Getting StartedExamplesPluginsAPI ReferenceFAQ
Community
TwitterStack OverflowDiscord
More
GitHub   Contribution Guidelines
Stars
Built with ❤️ at GeekyAnts.
Copyright © 2020 SyncState