Для создания рекурсивного списка комментариев в Vue.js есть несколько подходов. Вот два наиболее распространенных способа:
1. Использование компонентов:
Первый способ - это использование компонентов Vue.js для создания рекурсивной структуры. Для этого вам понадобится компонент, который будет представлять один комментарий, и внутри него вызывать этот же компонент для каждого дочернего комментария.
Пример кода:
<template> <div> <div>{{ comment.text }}</div> <div v-if="comment.children.length > 0"> <comment v-for="childComment in comment.children" :comment="childComment" :key="childComment.id"></comment> </div> </div> </template> <script> export default { name: 'Comment', props: { comment: { type: Object, required: true, }, }, components: { Comment, // рекурсивно вызываемый компонент }, }; </script>
Здесь у нас есть компонент Comment
, который принимает объект комментария в качестве свойства и отображает его текст. Если у комментария есть дочерние комментарии, мы рекурсивно вызываем тот же компонент Comment
для каждого дочернего комментария.
2. Использование рекурсивных компонентов в v-for
:
Второй способ - использовать рекурсивные компоненты прямо в директиве v-for
, чтобы создать рекурсивную структуру.
Пример кода:
<template> <div> <div v-for="comment in comments" :key="comment.id"> <div>{{ comment.text }}</div> <div v-if="comment.children.length > 0"> <comment :comments="comment.children"></comment> </div> </div> </div> </template> <script> export default { name: 'Comments', props: { comments: { type: Array, required: true, }, }, components: { Comment, // рекурсивно вызываемый компонент }, }; </script>
Здесь у нас есть компонент Comments
, который принимает массив комментариев в качестве свойства comments
. Мы используем директиву v-for
для итерации по комментариям и отображения их текста. Если у комментария есть дочерние комментарии, мы рекурсивно вызываем компонент Comment
и передаем ему массив дочерних комментариев.
Таким образом, при использовании любого из этих подходов вы сможете создать рекурсивную структуру для списка комментариев в Vue.js.