diff --git a/frontend/src/components/CommentsModal.jsx b/frontend/src/components/CommentsModal.jsx index 377c93a..af0b5c0 100644 --- a/frontend/src/components/CommentsModal.jsx +++ b/frontend/src/components/CommentsModal.jsx @@ -15,11 +15,13 @@ export default function CommentsModal({ post, onClose, onUpdate }) { const [loadingPost, setLoadingPost] = useState(false) // Загрузить полные данные поста с комментариями + // ВАЖНО: useEffect всегда вызывается, даже если post отсутствует useEffect(() => { + // Если пост не передан, очищаем состояние и выходим if (!post || !post._id) { - // Если пост не передан, очищаем состояние setFullPost(null) setComments([]) + setLoadingPost(false) return } @@ -31,6 +33,8 @@ export default function CommentsModal({ post, onClose, onUpdate }) { setComments(initialComments) // Затем загрузим полные данные для обновления + let cancelled = false + const loadFullPost = async () => { try { setLoadingPost(true) @@ -40,6 +44,9 @@ export default function CommentsModal({ post, onClose, onUpdate }) { ? await getPosts({ userId: authorId, limit: 100 }) : await getPosts({ limit: 200 }) + // Проверяем, что запрос не был отменен + if (cancelled) return + const foundPost = response.posts?.find(p => p._id === post._id) if (foundPost) { // Проверяем, что комментарии populate'ены с авторами @@ -53,28 +60,26 @@ export default function CommentsModal({ post, onClose, onUpdate }) { console.error('[CommentsModal] Ошибка загрузки поста:', error) // Оставляем переданные данные } finally { - setLoadingPost(false) + if (!cancelled) { + setLoadingPost(false) + } } } loadFullPost() - }, [post?._id]) // Только ID поста в зависимостях + + // Cleanup функция для отмены запроса при размонтировании + return () => { + cancelled = true + } + }, [post?._id || null]) // Только ID поста в зависимостях, используем null для стабильности // Проверка на существование поста ПОСЛЕ хуков - if (!post || !post._id) { - return null - } - const displayPost = fullPost || post - - // Дополнительная проверка на наличие автора - if (!displayPost.author) { - console.warn('[CommentsModal] Пост без автора:', displayPost._id) - return null - } + const hasValidPost = post && post._id && displayPost && displayPost.author const handleSubmit = async () => { - if (!comment.trim() || loading) return + if (!comment.trim() || loading || !post || !post._id) return try { setLoading(true) @@ -137,6 +142,11 @@ export default function CommentsModal({ post, onClose, onUpdate }) { } } + // Если нет валидного поста, не рендерим модалку вообще + if (!hasValidPost) { + return null + } + return createPortal(