Почему я не могу получить курсор в поле поиска внутри выпадающего списка?

#reactjs

#reactjs

Вопрос:

Мне нужно окно поиска внутри выпадающего списка. Я вставил окно поиска, но не могу ничего ввести, так как при нажатии курсор не появляется. Не уверен, связано ли это с перекрытием. Как я могу решить эту проблему?

Я создал два окна поиска — одно внутри выпадающего списка, а другое снаружи, просто чтобы посмотреть, как на самом деле работает поиск. Один внешний позволяет мне печатать, а другой — нет.

Ниже приведен код.

 import React, { Component } from "react";
import ReactDOM from "react-dom";
import DpDwn from "./dropdown.json";
import "./App.css";
import "./carbon-components-stylesheet.css";
import {
  DropdownV2,
  Search,
  Accordion,
  AccordionItem
} from "carbon-components-react";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      selectedItem: "Label",
      selectedId: 0
    };
  }

  render() {
    const onChange = search_item => {
      console.log(search_item.target.value);
    };
    const itemToElement = item => {
      return (
        <li
          style={{ height: 20 }}
          value={item.value}
          onClick={evt => {
            evt.preventDefault();
          }}
          onKeyPress={evt => evt.preventDefault()}
          tabIndex={-1}
          id="listUsed"
        >
          <Search
            className="some-class"
            name="abc"
            defaultValue=""
            labelText="Search"
            closeButtonLabelText=""
            placeHolderText="Search"
            onChange={onChange}
            onClick={event => {
              console.log("hi");
            }}
            id="search-2"
          />
          <Accordion>
            {item.lvl_1.map((item0, index) => {
              return (
                <AccordionItem title={item0.BUSINESS_UNIT_NAME} id="lvl1">
                  {item0.lvl_2.map((item1, index) => {
                    return (
                      <AccordionItem title={item1.BRAND_NAME} id="lvl2">
                        {item1.lvl_3.map((item2, index) => {
                          return (
                            <p
                              onClick={() => {
                                ReactDOM.findDOMNode(
                                  this
                                ).getElementsByClassName(
                                  "bx--list-box__menu"
                                )[0].style.display = "none";

                                ReactDOM.findDOMNode(
                                  this
                                ).getElementsByClassName(
                                  "bx--list-box__menu-icon bx--list-box__menu-icon--open"
                                )[0].className = "bx--list-box__menu-icon";

                                this.setState({
                                  selectedItem: item2.NAME,
                                  selectedId: item2.VALUE
                                });
                              }}
                            >
                              {item2.NAME}
                            </p>
                          );
                        })}
                      </AccordionItem>
                    );
                  })}
                </AccordionItem>
              );
            })}
          </Accordion>
        </li>
      );
    };
    const items4dropDown = DpDwn.map(item => ({
      lvl_1: item.lvl_1
    }));

    return (
      <div className="App">
        <div style={{ width: 300, position: "relative", top: "100px" }}>
          <Search
            className="some-class"
            name="abc"
            defaultValue=""
            labelText="Search"
            closeButtonLabelText=""
            placeHolderText="Search"
            onChange={onChange}
            onClick={event => {
              console.log("hi");
            }}
            id="search-1"
          />
          <DropdownV2
            label={this.state.selectedItem}
            ariaLabel="Dropdown"
            items={items4dropDown}
            itemToElement={itemToElement}
            onClick={evt => {
              evt.preventDefault();
            }}
          />
        </div>
      </div>
    );
  }
}

export default App;
 

Мне нужно, чтобы поле поиска внутри выпадающего списка отображало курсор, чтобы он позволял вводить текст

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

1. Пожалуйста, не используйте getElementsByClassName так — это беспорядок и противоречит использованию React. Нам также нужна дополнительная информация о компонентах, которые вы только что использовали.

2. Я использовал только 4 карбоновых компонента и добавил немного стиля. Не могли бы вы, пожалуйста, сказать мне, какая дополнительная информация вам нужна

3. Кроме того, я новичок в react, поэтому не имею большого представления об использовании getElementsByClassName so, не могли бы вы подсказать мне правильный способ его использования?