Я считаю, что большинство из вас должно быть знакомо с концепцией рекурсии . Если нет, перейдите по этой ссылке .
Примеры - лучший способ что-то объяснить, поэтому мы также рассмотрим пример.
Предположим, вам нужно создать компонент для вложенных комментариев (у вас есть комментарий, и когда вы отвечаете на этот комментарий, он должен отображаться во вложенном формате и т. Д.)
Вот изображение для вашей справки.
Итак, давайте разделим проблему на две части.
Часть 1: Сделайте компонент для обычного списка комментариев.
Часть 2: Измените компонент вложенных комментариев.
Вы можете найти полный рабочий код здесь
Часть 1: Сделайте компонент для обычного списка комментариев.
Во-первых, поддерживайте состояние массива комментариев.
const getDate = () => {
var today = new Date();
return (
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
);
};
const getTime = () => {
var today = new Date();
return today.getHours() + ":" + today.getMinutes();
};
const [commentsArray, setCommentsArray] = useState([
{
username: Jen,
userId: 1,
date: getDate(),
time: getTime(),
content: "How Artistic!",
replies: [
{
username: Elliot,
userId: 2,
date: getDate(),
time: getTime(),
content: "True",
replies: [] //This represents the nested comment
}
]
}
]);
//inside return statement of parent component
<div>
{commentsArray.map((item, index) => {
return (
<CommentItem
key={index}
getDate={getDate}
getTime={getTime}
item={item}
/>
);
})}
</div>
Вот как выглядит ваш компонент CommentItem .
import React, { useState }from 'react'
//props.item is each comment
function CommentItem(props) {
return (
<div>
<div>{props.item.username}</div>
<div>{props.item.date} at {props.item.time}</div>
</div>
)
}
export default CommentItem
const nestedComments = (props.item.replies || [])
.map((item, index) => {
return (
<CommentItem
item={item}
key={index}
/>
);
});
Мы добавим эту константу в наш оператор возврата CommentItem. Итак, наш последний компонент выглядит примерно так.
import React, { useState }from 'react'
//props.item is each comment
function CommentItem(props) {
const nestedComments = (props.item.replies || [])
.map((item, index) => {
return (
<CommentItem
item={item}
key={index}
/>
);
});
return (
<div>
<div>{props.item.username}</div>
<div>{props.item.date} at {props.item.time}</div>
<div>{nestedComments}</div>
</div>
)
}
export default CommentItem
На этом пока все, по любым вопросам обращайтесь ко мне по адресу [email protected] .
Введение Инсульт — это неотложная медицинская помощь, которая может случиться с кем угодно в любое время. Это происходит, когда приток крови к части мозга нарушается, что приводит к внезапной потере функции мозга.
Тестирование — неотъемлемая часть разработки программного обеспечения. Это гарантирует, что код надежен, функционирует должным образом и снижает вероятность ошибок.
(Предупреждение — это сатира, предназначенная для радостной подрывной деятельности — определенно не для детей) Вы видели, как ваши мама и папа прячутся на кухне и курят эти вонючие сигареты. Они говорят вам.
Вчера мы закрыли двери конкурса песни «Евровидение» в этом году блестящим, хаотичным грандиозным финалом, в котором шведская певица Лорин забрала домой трофей, став первой женщиной, выигравшей дважды, и вернув корону Швеции спустя 50 лет после того, как ABBA выиграла конкурс. с «Ватерлоо». Они стали одним из крупнейших исполнителей в каноне поп-музыки.
Мы часто обнаруживаем, что изо всех сил пытаемся реализовать то, что, как мы знаем, полезно для нас. От того, чтобы сказать значимому другому, что мы любим его, до того, чтобы помнить, что нужно говорить как пират, всегда будут те, кто утверждает, что день, неделя или месяц событий не нужны, потому что они уже делают эти вещи.
Если мы хотим продолжать процветать на этой планете, нам придется вести опасные разговоры. Те, которые бросают вызов тому, что мы сделали, что мы делаем и что мы в настоящее время собираемся продолжать делать (или планируем делать).