React Query 的競爭條件
P粉364642019
P粉364642019 2023-09-03 09:51:21
0
1
689
<p>我正在嘗試使用反應查詢創建一個 Todo 應用程序,但我面臨競爭條件問題。 我有一個待辦事項頁面,使用者更新/建立新的待辦事項,然後點擊儲存。 保存過程可能需要大約 3 秒,具體取決於使用者的網路連線。 編輯待辦事項後,使用者仍保留在待辦事項頁面中。 建立新的待辦事項後,使用者將導覽至待辦事項頁面。 </p> <p>問題是, 當使用者建立/更新待辦事項然後點擊顯示待辦事項模式(這是外部元件,我無法編輯它) 模式顯示編輯前的待辦事項/如果是新待辦事項則為空</p> <p>當我偵錯問題時,我可以看到在模式開啟後反應查詢取得待辦事項。 如果我關閉模式並再次開啟它,它將顯示更新的待辦事項。 </p> <pre class="brush:php;toolbar:false;">const {todo} = useTodoQuery() const openModal = () => modal.open(todo) return ( <TodoModalButton onClick={openModal}>Open Todo Preview Modal</TodoModalButton> )</pre> <pre class="brush:php;toolbar:false;">const useTodoQuery = () => { const {data, ...rest} = useQuery(['todo', todoId], async () => { if (todoId) { return await getTodo(todoId) } return null; }) return {data, ...rest} }</pre> <pre class="brush:php;toolbar:false;">const queryClient = new QueryClient({ defaultOptions: { suspense: false, keepPreviousData: true, } })</pre> <p>如果我刪除 keepPreviousData,待辦事項將是未定義的。 </p> <pre class="brush:php;toolbar:false;">const todoMutation = useMutation( ['todo'], getUpdatedTodo, {onSuccess: () => queryClient.invalidateQueries(['todo', todoId])} );</pre> <p>我嘗試過使用 <code>{onSuccess: (todo) => queryClient.setQueryData(['todo', todoId], todo)}</code> 但效果並不理想。 </p>
P粉364642019
P粉364642019

全部回覆(1)
P粉775723722

只需等待 onSuccess 回呼並開啟模型後:)解決:D

如果不可能,請提供更多詳細資訊

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板