Я создаю динамические c меню с использованием рекурсивной функции, и я уже создал меню, и они отображаются без ошибок в правильном порядке.
И я получаю данные для меню из service. js файл, и вы можете увидеть все работающее приложение в следующем примере песочницы кода,
https://codesandbox.io/s/reactstrap-accordion-3uoz9
Требование:
Здесь мне нужно выяснить последний уровень меню и нужно назначить флажок со значением в качестве их соответствующий идентификатор {item.id}
.
Например:
для первого меню один ,
-> [Checkbox with value as 1.1.1] One-One-One
-> [Checkbox with value as 1.1.2] One - one - two
-> [Checkbox with value as 1.1.3] One - one - three
для второго меню два ,
-> [Checkbox with value as 2.1] Two - one
.
.
.
Для шестого меню шесть ,
-> [Checkbox with value as 6] Six
Надеюсь, суть в том, что мне нужно выяснить последний уровень в рекурсии, и я должен присвоить ему флажок со значением их идентификатора.
Пожалуйста, ответьте на код в изолированной программной среде и помоги мне чтобы добиться результата установки флажка на последнем уровне.
Необязательное требование: Свертывание работает для целых меню сразу, если это возможно, сделайте так, чтобы оно сворачивалось на каждом отдельном уровне как уникальное.
Но главное важное требование - установить флажок на последнем уровне меню. Большое спасибо заранее ...
Редактировать:
Как прокомментировал Crowder, я создал снимающий код для удаления кода реакции, и теперь все в порядке, потому что я нахожусь в необходимость отображения флажка, встроенного в последний уровень подменю (последние дочерние элементы).
const menuData = [
{
id: "1",
name: "One",
children: [
{
id: "1.1",
name: "One - one",
children: [
{ id: "1.1.1", name: "One - one - one" },
{ id: "1.1.2", name: "One - one - two" },
{ id: "1.1.3", name: "One - one - three" }
]
}
]
},
{
id: "2",
name: "Two",
children: [{ id: "2.1", name: "Two - one" }]
},
{
id: "3",
name: "Three",
children: [
{
id: "3.1",
name: "Three - one",
children: [
{
id: "3.1.1",
name: "Three - one - one",
children: [
{
id: "3.1.1.1",
name: "Three - one - one - one",
children: [
{ id: "3.1.1.1.1", name: "Three - one - one - one - one" }
]
}
]
}
]
}
]
},
{ id: "4", name: "Four" },
{
id: "5",
name: "Five",
children: [
{ id: "5.1", name: "Five - one" },
{ id: "5.2", name: "Five - two" },
{ id: "5.3", name: "Five - three" },
{ id: "5.4", name: "Five - four" }
]
},
{ id: "6", name: "Six" }
];
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
currentSelection: "",
menuItems: [],
isToggleOpen: false
};
}
componentDidMount() {
this.setState({ menuItems: menuData });
}
handleClick(id, evt) {
evt.preventDefault();
console.log("click handler called with", id);
this.setState({ currentSelection: id });
}
toggle() {
console.log(this.state);
this.setState({
isToggleOpen: !this.state.isToggleOpen
});
}
buildMenu(items) {
return (
<ul>
{items &&
items.map(item => (
<li key={item.id}>
<div>
{item.name}
{item.children && item.children.length > 0
? this.buildMenu(item.children)
: null}
</div>
</li>
))}
</ul>
);
}
render() {
return (
<div>
<h2>Click any of the below option</h2>
{this.state.menuItems &&
this.state.menuItems.map((item, index) => {
return (
<div key={index}>
{item.name}
{this.buildMenu(item.children)}
</div>
);
})}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/reactstrap/4.8.0/reactstrap.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/reactstrap/4.8.0/reactstrap.min.css" />
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.development.js"></script>