Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

229
Views
React Query // ¿Cómo usar correctamente el estado del cliente y el estado del servidor (cuando el usuario puede arrastrar/ordenar elementos en la interfaz de usuario)?

Tengo una aplicación React que usa React Query para cargar un conjunto de datos de folders que contienen items . La aplicación permite al usuario arrastrar/ordenar elementos (dentro de una carpeta y arrastrarlos a otra carpeta). Antes de implementar arrastrar/ordenar, era simple, RQ buscaba el conjunto de datos folderData y luego el padre proporcionaba datos a los componentes secundarios: padre > folder > item .

Para implementar arrastrar/ordenar, ahora tengo que copiar todo el conjunto de datos folderData en una variable de estado del cliente foldersLocal . Esta es la única forma en que pude averiguar cómo cambiar la interfaz de usuario cuando el usuario mueve un elemento.

Sin embargo, siento que este enfoque esencialmente elimina la mayoría de los beneficios de usar React Query porque tan pronto como se obtienen los datos, copio todo el conjunto de datos en una variable de estado del "lado del cliente" ( foldersLocal ) y solo trabajo con él. Esto también hace que la funcionalidad QueryClientProvider efectivamente inútil.

¿Hay una mejor manera de abordar esto? ¿O me estoy perdiendo algo?

 // Fetch data using React Query const {isLoading, isError, foldersData, error, status} = useQuery(['folders', id], () => fetchFoldersWithItems(id)); // Place to hold client-state so I can modify the UI when user starts to drag/sort items const [foldersLocal, setFoldersLocal] = useState(null); // Store React Query data in client-state everytime it's fetched useEffect(() => { if (status === 'success') { setFoldersLocal(foldersData); } }, [foldersData]); // Callback to change "foldersLocal" when user is dragging an item const moveItem = useCallback((itemId, dragIndex, hoverIndex, targetFolderId) => { setFoldersLocal((prevData) => { // change data, etc. so the UI changes } } // Drastically simplified render method return ( <QueryClientProvider client={queryClient}> <FolderContainer folders={foldersLocal} moveItem={moveItem} moveItemCompleted={moveItemCompleted}/> </QueryClientProvider> )
about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!