#reactjs #typescript #react-typescript #recursive-datastructures #recursive-type
Вопрос:
Ранее в моем компоненте был только один уровень подзадачи, поэтому,
это выглядело бы так
основной пункт 1
- подпункт 1
- подпункт 2
основной пункт 2
- подпункт 1
Для этого мой код выглядел так
interface PointCardProps {
pointData: {
mainPoint: string
subPoint: string[]
}[]
}
export const singleNest = (props:PointCardProps) => {
return(
<ol>
{props.pointData.map((value) => {
return (
<>
<li>
<div>
{value.mainPoint}
<div>
<ul>
{value.subPoint.map((point) => {
return <li>{point}</li>
})}
</ul>
</div>
</div>
</li>
</>
)
})}
</ol>
)
}
Как я могу изменить компонент таким образом, чтобы он мог иметь любое количество уровней
например: основной пункт 1
- подпункт 1
- подпункт 2
- подпункт 2.1
- подпункт 2.2
- подпункт 2.2.1
- подпункт 2.2
- подпункт 2.1
нужно начать с изменения интерфейса, пожалуйста, помогите
Комментарии:
1.
pointData
должно быть рекурсивным. ДолженsubPoint
содержать ещеpointData
один ? Пример:type Tree<T> = { node: T, tree: Tree<T> }
2. @капитан-йоссариан Я мало работал над машинописным текстом, поэтому я не понимаю, что это значит, можете ли вы показать небольшие фиктивные данные, чтобы показать, как
type Tree<T> = { node: T, tree: Tree<T> }
это выглядит ?3. Конечно , tsplay.dev/N52lBm
4. @капитан-йоссариан да, это было то, о чем я думал. не знаю, как рекурсивно распределять очки, я тороплюсь со временем, так что на самом деле у меня нет роскоши сидеть и думать
Ответ №1:
Здесь у вас есть рекурсивный компонент react с рекурсивными реквизитами:
type Point = {
point: string;
subpoints: Point[];
};
const points = {
point: "0",
subpoints: [
{
point: "1",
subpoints: [
{
point: "2",
subpoints: []
}
]
}
]
};
const RecursiveList = (props: Point) => {
const { point, subpoints } = props;
console.log({ subpoints });
return (
<>
<div>{point}</div>
<ul>
{subpoints.map((elem, index) => (
<RecursiveList key={index} {...elem} />
))}
</ul>
</>
);
};
export default function App() {
return <RecursiveList {...points} />;
}