@enid
Для реализации многоуровневого выпадающего списка на React.js можно использовать компоненты и стилизацию с помощью CSS. Вот пример реализации:
- Создайте компонент Dropdown с помощью функции-конструктора React:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import React, { useState } from 'react';
function Dropdown({ options }) {
const [value, setValue] = useState(null);
const [isOpen, setIsOpen] = useState(false);
const handleOptionClick = (option) => {
setValue(option);
setIsOpen(false);
};
return (
<div className="dropdown">
<div className="dropdown__toggle" onClick={() => setIsOpen(!isOpen)}>
{value ? value.label : 'Select an option'}
</div>
{isOpen && (
<ul className="dropdown__options">
{options.map((option) => (
<li key={option.value} onClick={() => handleOptionClick(option)}>
{option.label}
</li>
))}
</ul>
)}
</div>
);
}
export default Dropdown;
|
- Добавьте стилизацию с помощью CSS:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
.dropdown {
position: relative;
}
.dropdown__toggle {
display: inline-block;
padding: 8px 16px;
background-color: #eee;
border: 1px solid #ccc;
border-radius: 4px;
cursor: pointer;
}
.dropdown__options {
position: absolute;
top: 100%;
left: 0;
width: 100%;
margin: 0;
padding: 0;
list-style: none;
background-color: #fff;
border: 1px solid #ccc;
border-top: none;
border-radius: 0 0 4px 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.dropdown__options li {
padding: 8px 16px;
cursor: pointer;
}
.dropdown__options li:hover {
background-color: #f1f1f1;
}
|
- Для создания многоуровневого выпадающего списка можно добавить в options объекты с подмассивами, например:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
const options = [
{
label: 'Option 1',
value: 'option1',
children: [
{
label: 'Suboption 1.1',
value: 'suboption1.1',
},
{
label: 'Suboption 1.2',
value: 'suboption1.2',
},
],
},
{
label: 'Option 2',
value: 'option2',
},
];
|
- Измените компонент Dropdown так, чтобы он мог рендерить подуровни вложенности children:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import React, { useState } from 'react';
function Dropdown({ options }) {
const [value, setValue] = useState(null);
const [isOpen, setIsOpen] = useState(false);
const handleOptionClick = (option) => {
if (option.children) {
setIsOpen(!isOpen);
} else {
setValue(option);
setIsOpen(false);
}
};
const renderOptions = (options) => {
return (
<ul className="dropdown__options">
|