使用 `react-autosave` 时将 `id` 传递给 `useCallback`?

Passing `id` to `useCallback` when using `react-autosave`?

README of react-autosave 中提到我应该使用 useCallback 但我不确定如何将 id 传递给它,因为我在突变中需要它。

id & text 在我的情况下不断变化。

const updateDraft = useCallback(
    (newText: string) => {
      console.log('updateDraft')
      console.log({ id: snap.doc.id, text: newText })
      updateDocs({ id: snap.doc.id, text: newText })
      toggleIsSaved(true)
    },
    [snap.doc.id]
  )

  useAutosave({
    data: snap.doc.text,
    onSave: updateDraft,
  })

我正在使用 valtio 作为全局状态管理器。这就是 snap.doc.id 的来源。但是每次,第一个 snap.doc.id 都会因为 useCallback 而通过,因为使用了相同的函数,所以每次它改变同一行时 snap.doc.id 保持不变。

分支完全复制 react-autosavehttps://github.com/deadcoder0904/docs-autosync/tree/react-autosave

我将完整的 doc 传递给它并在 useCallback 中对其进行解构,例如:

const updateDraft = useCallback(
    ({ id, text }: Doc) => {
      if (id !== '') {
        updateDocs({ id, text })
      }
      toggleIsSaved(true)
    },
    [snap.doc.id]
  )

  useAutosave({
    data: snap.doc,
    onSave: updateDraft,
  })

事实证明,这工作得很好。