Как мне сделать компонент автозаполнения пользовательского интерфейса Material похожим на тот, который находится на веб-сайте Material UI

#reactjs #material-ui

#reactjs #материал-пользовательский интерфейс

Вопрос:

На веб-сайте Material UI есть много примеров того, как настроить AutoComplete компонент, но, как ни странно, он не дает примера наиболее распространенного варианта использования… поисковый ввод в заголовке страницы.

Они явно знают, как это сделать, потому что тот, который находится на самом веб-сайте Material UI, — это именно то, что я хочу. Перейдите на любую страницу на https://material-ui.com / и область заголовка содержит поле поиска, которое содержит значок поиска, имеет разумный размер для заголовка, расширяется при фокусировке и содержит белый текст (поскольку заголовок имеет сплошной цвет). К сожалению, проверка элемента не очень помогла.

Я довольно близко подобрался после нескольких часов игры, но мое окно поиска по-прежнему слишком велико, выглядит не так хорошо, как на веб-сайте Material UI, и упорно отказывается отображать что-либо, кроме черного текста.

Это код, который у меня есть

 import React, { useState, useEffect } from 'react';
import { TextField, makeStyles } from '@material-ui/core';
import Autocomplete from '@material-ui/lab/Autocomplete';
import SearchIcon from '@material-ui/icons/Search';
import clsx from 'clsx';

const useStyles = makeStyles((theme) => ({
  root: {
    display: 'flex',
    alignItems: 'center',
  },
  searchIcon: {
    padding: theme.spacing(0, 2),
    paddingTop: theme.spacing(2),
    width: theme.spacing(7),
    pointerEvents: 'none',
    display: 'inline-block',
  },
  inputText: {
    display: 'inline-block',
    color: 'white',
    transition: theme.transitions.create('width'),
    [theme.breakpoints.up('md')]: {
      marginLeft: theme.spacing(1),
      width: '12ch',
      'amp;:focus': {
        width: '20ch',
      },
    },
  },
}));

export const SearchBox = ({ className }) => {
  const classes = useStyles();
  const [searchResult, setSearchResult] = useState([]);

  useEffect(() => {
    setSearchResult([
      { id: '01', type: 'View', matchingText: ' Hello world 1' },
      { id: '02', type: 'Node', matchingText: ' Hello world 2' },
      { id: '03', type: 'View', matchingText: ' Hello world 3' },
      { id: '04', type: 'Node', matchingText: ' Hello world 4' },
    ]);
  }, []);

  return (
    <div className={clsx(classes.root, className)}>
      <Autocomplete
        classes={{ root: classes.autocompleteRoot }}
        freeSolo
        disableClearables
        options={searchResult}
        groupBy={(option) => option.type}
        getOptionLabel={(option) => option.matchingText}
        renderInput={(params) => (
          <>
            <div className={classes.searchIcon}>
              <SearchIcon />
            </div>
            <TextField
              {...params}
              label="Search"
              classes={{ root: classes.inputText }}
              margin="normal"
              variant="outlined"
              InputProps={{ ...params.InputProps, type: 'search' }}
            />
          </>
        )}
      />
    </div>
  );
};

export default SearchBox;

  

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

1. перейдите на панель приложений, и у них есть именно то, что вы хотите

2. вы можете сделать это один раз (вам нужно будет создать эту функциональность фокусировки с помощью css) teamwertarbyte.github.io/material-ui-search-bar

3. Сначала я начал с примера поиска на панели приложений, но он не использует компонент автозаполнения.

4. Похоже, мне нужно настроить TextField компонент, но в нем также нет примеров настройки цвета текста material-ui.com/components/text-fields