Диалог закрывается, когда родитель редернизируется в React/nextjs/shadcnJavascript

Форум по Javascript
Ответить
Anonymous
 Диалог закрывается, когда родитель редернизируется в React/nextjs/shadcn

Сообщение Anonymous »

У меня есть следующая страница: < /p>

Код: Выделить всё

'use client';
import { use } from 'react';

import { useCourseNode } from '@/api/course/hooks';
import { Loader } from '@/components/loaders/loader';
import { DefaultTreeNodeBox } from '@/components/tree/renderers/boxes/node-box';
import { EntityTargetType } from '@/lib/enums';
import { useDocumentTitle } from '@uidotdev/usehooks';
import { notFound } from 'next/navigation';

export default function ContentPage(props: {
params: Promise;
}) {
const params = use(props.params);

const queryNode = useCourseNode(params.node);

useDocumentTitle(
queryNode.data?.name
? queryNode.data.name + ' | ' + queryNode.data.target.name
: ''
);

if (queryNode.isLoading) return ;
if (!queryNode.data) return notFound();

const node = queryNode.data;

return (

);
}

в defaulttreeNodebox I рендеринг различных вещей, включая диалог . Вот этот компонент: < /p>

Код: Выделить всё

import { ExamAttemptResultBox } from '@/app/(app)/account/activity/exam-attempt-card';
import { SolveExamDialog } from '@/app/(public)/exams/[id]/solve-exam/solve-exam-dialog';
import { SolveExamProvider } from '@/app/(public)/exams/[id]/solve-exam/solve-exam-provider';
import { RemoveExamAttemptDialog } from '@/app/(public)/exams/remove-exam-attempt-dialog';
import { CardActionsContainer } from '@/components/card-actions-container';
import { PlayIcon } from '@/components/icons/play-icon';
import { Button } from '@/components/ui/button';
import { TextGradient } from '@/components/ui/text-gradient';
import { Role } from '@/lib/enums';
import { getUserOrGuest } from '@/lib/utils';
import { Exam, ExamAttempt } from '@/types';
import { Eye } from 'lucide-react';

export const SolveExamBox = ({
exam,
examAttempt,
}: {
exam: Exam;
examAttempt?: ExamAttempt;
}) => {
const user = getUserOrGuest();
if (examAttempt) examAttempt.exam = exam;

if (examAttempt?.result)
return (











Wynik






);

if (user && user.role !== Role.USER) return null;

return (




Rozwiąż online






);
};

Первоначально нет результата в экзамену , так что пользователь сбивает с собой для решения экзамена, и он открывает диалоговое окно. Однако, когда пользователь заканчивает экзамен, узел на главной странице недействителен, и из -за этого вся страница ререндеров и закрывает диалог. Я хотел бы оставить его открытым и только на фоновом ререндере - возможно ли это? Я попытался добавить те же ключи в SolveExamProvider и SolveExam компоненты в SolveExambox , но контекст полностью редернизан, когда узел неверно. Есть идеи, как это исправить?


Подробнее здесь: https://stackoverflow.com/questions/797 ... tjs-shadcn
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»