ar_sync icon indicating copy to clipboard operation
ar_sync copied to clipboard

外部からの強制データ上書き・一定期間有効なパッチ上書き

Open tompng opened this issue 5 years ago • 2 comments

ar_syncの通知・自動反映を待っていると、ラグが気になることがある (ボタンを押したらすぐ何か変化があって欲しい、など) appoloとかでやっているらしい、postしたら(そのレスポンスを元に)データいい感じに更新してくれるやつ

const newtitle = 'あたらしいタイトル' 
await response = post('/post/3', { title: newtitle })
ArSync.foobarUpdateAllData('Post', 3, { title: response.title })
const newtitle = 'あたらしいタイトル' 
const patch = ArSync.foobarAddPatch('Post', 3, { title: newtitle }, { time: 10000 })
try {
  await response = post('/post/3', { title: 'あたらしいタイトル' })
  patch.invalidate()
  ArSync.foobarUpdateAllData('Post', 3, { title: response.title })
} catch(e) {
  patch.invalidate()
}

こんな感じのAPI用意しとけばいいかな?

tompng avatar Nov 25 '19 10:11 tompng

ArSyncで提供しなくてもこれでできるから別に良さそう...

const [post, status] = useArSyncModel(...)
const [patchedPost, createPatch] = useFoobarPatch(post)

const submit = (title: string, body: string) => {
  const patch = createPatch({ title, body })
  try {
    await myApi.updatePost(post.id, { title, body })
    patch.invalidate(n * 1000) // n秒後に無効にする(無効になる前にarsyncで更新されればよし)
  } catch(e) {
    patch.invalidate()
  }
}

もっとまとめると

const [post, status] = useArSyncModel(...)
const [patchedPost, updatePost] = useFoobarPatch(post, myApi.updatePost)
const submit = (title: string, body: string) => updatePost({ title, body }))

tompng avatar Nov 25 '19 10:11 tompng

このusePatchを含めてしまえば良い?

tompng avatar Nov 25 '19 10:11 tompng