Guedda
@Guedda
Начинающий front-end разработчик

Как правильно создать рекурсивный компонент?

У меня есть данные вида:
{
  name: "Name",
  required: true,
  type: "object",
  properties: [
    {
      name: "Name2",
      required: false,
      type: "object",
      properties: [
      {
        name: "Name3",
        required: false,
        type: "text"
      },
      {
        name: "Name4",
        required: false,
        type: "text"
      }
      ]
    },
    {
      name: "Name5",
      required: false,
      type: "text"
    }
  ]
}

Соответственно, вложенность может быть любой. Пытаюсь создать компонент, который бы рекурсивно рендерил эти данные:
import React, { Component } from 'react';

export default class PropertiesParser extends Component {
    render() {
        let propers = this.props.properties;
        if (propers) {
            switch (propers.type) {
                case "text":
                    return (
                        <div className="row">
                            <div className="col-md-2">
                                {propers.name}
                            </div>
                            <div className="col-md-10">
                                <input
                                    type="text"
                                    name={propers.name}
                                    required={propers.required}
                                    value="" />
                            </div>
                        </div>
                    );
                    break;

                case "object":
                    return (<div>{propers.properties.map(property => 
                        <PropertiesParser key={propers.Name + Math.random()} properties={property} />
                    )}</div>);
                    break;
            }

        }
    
        return (
            <div>
            </div>
        );
    }
}

Но когда я пытаюсь проверить работу данного кода, то он не работает а в консоли пишется ошибка:
Uncaught RangeError: Maximum call stack size exceeded

Когда вставил console.log(propers) в начало рендера, то консоль завалило повторяющимися объектами, т.е. если взять в пример вышеописанный объект, то в консоли я увижу кучу повторяющихся:

{name: "Name", required: true, properties: Array(2), type: "object"}
{name: "Name2", required: true, type: "object"}
...

И так далее. Что я делаю не так?
  • Вопрос задан
  • 690 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы