Трудности при построении древовидной иерархии в react

#javascript #css #reactjs

#javascript #css #reactjs

Вопрос:

Я хотел использовать древовидное представление, но я испытываю трудности при построении дерева (иерархического представления информации) в react.

то же, что https://www.w3schools.com/howto/howto_js_treeview.asp

Что я пытаюсь CodeSandbox — https://codesandbox.io/s/unruffled-babbage-9knrz?file=/index.js

JSON — (это не исправлено, может быть в любом формате)

 const data = [
  {
    title: "Node 1",
    childNodes: [
      { title: "Childnode 1.1" },
      {
        title: "Childnode 1.2",
        childNodes: [
          {
            title: "Childnode 1.2.1",
            childNodes: [{ title: "Childnode 1.2.1.1" }]
          },
          { title: "Childnode 1.2.2" }
        ]
      }
    ]
  }
];
  

У меня есть функция переключения, которая расширяет и наоборот узел дерева.
Я изо всех сил пытаюсь построить дерево в react.

Пожалуйста, направьте меня.

Ответ №1:

Во-первых, вам не нужно использовать <Tree/> в качестве рекурсивного компонента, вместо него используйте <Node/>

Вторая вещь в React вам не нужно использовать querySelector и classList для изменения state компонента.

Я реализовал свою идею в коде здесь

 const Tree = () => {
  return (
    <ul>
      {data.map(({ title, childNodes }) => (
        <Node key={title} title={title} childNodes={childNodes} />
      ))}
    </ul>
  );
};

class Node extends React.Component {
  state = {
    isOpen: false
  };
  toggle = () => {
    this.setState({
      isOpen: !this.state.isOpen
    });
  };
  render() {
    const { title, childNodes } = this.props;
    const { isOpen } = this.state;

    return (
      <li>
        <span className="caret" onClick={this.toggle}>
          {title}
        </span>
        {childNodes amp;amp; isOpen amp;amp; (
          <ul>
            {childNodes.map(({ title, childNodes }) => (
              <Node key={title} title={title} childNodes={childNodes} />
            ))}
          </ul>
        )}
      </li>
    );
  }
}

export default Tree
  

Комментарии:

1. Спасибо, codesandbox.io/s/unruffled-babbage-9knrz?file=/index.js Я пытался использовать каретку вниз в функции tooggle при нажатии на нее, и еще одна вещь: что, если мои данные json не фиксированы, и я должен получить значение ключа динамически. Спасибо..