React useTransition() застрял в isPending = true при вызове маршрутов API из папки /pages/api

У меня возникла проблема с useTransition(), поскольку для него устанавливается значение true, но на самом деле он никогда не меняется обратно на false. Я пытаюсь удалить запись из MongoDB, и после ее завершения я хотел бы обновить компонент React Server, как описано здесь:https://beta.nextjs.org/docs/data-fetching/mutating .

Проблема в том, что в этом случае серверный компонент не будет обновляться, а кнопка зависает при загрузке текста.

      'use client'

const DeleteButton = ({ details }) => {
  const [isPending, startTransition] = useTransition();
  const router = useRouter();
  
  const handleDelete = async () => {
    await fetch('/api/clients', { method: 'DELETE', body: details._id });
     startTransition(() => {
       console.log('tran started', isPending);
       router.refresh();
     });
  }

  useEffect(() => {
    // at load isPending = false
    // after start tranisition it is set to false
    // but it never returns back to false 
    console.log('is pending ? ', isPending);
  }, [isPending]);

  return <Button onClick={() => handleDelete()}>{ isPending ? 'Loading' : 'Delete' }</Button>
}

Это код BE в /api/clients

      import type { NextApiRequest, NextApiResponse } from 'next';
import ClientsCollection from '../../db/collections/clients';
import Client from '../../helpers/interfaces/client';

type Data = {
  name: string;
};
const clientsCollection = new ClientsCollection();

export default function handler(req: NextApiRequest, res: NextApiResponse<any>) {
  switch (req.method) {
    case 'DELETE': {
      const result = clientsCollection.deleteClientById(req.body);
      res.status(200).json(result);
    }
    default:
      res.status(403);
  }
}

1 ответ

Закрытие этого.

Я неправильно понял, почему произошла ошибка, у меня в основном было useEffect, чтобы реагировать на изменения из Redux, которые по какой-то причине заблокировали настройку isPending обратно на false.

Я отлаживал его так, как я закомментировал текущую таблицу, в которой отображались все записи, и создал простую таблицу html без какой-либо функциональности, которая помогла мне определить, какой код был неправильным.

Другие вопросы по тегам