reactjs material-ui在自动完成组件中添加搜索图标

hk8txs48  于 2023-06-05  发布在  React
关注(0)|答案(4)|浏览(222)

我正在使用@material-ui autocomplete进行搜索,我想在autocomplete组件旁边添加搜索图标
我尝试了这样的东西,但在改变----选项字段不显示

import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";
.
.
.
<Autocomplete
      id="combo-box-demo"
      options={this.state.results} // .map((option) => option.title_display)
      getOptionLabel={(option) => option.title}
      style={{ width: 300 }}
      onInputChange={this.handleInputChange}
      renderInput={(params) => (
        <TextField
          {...params}
          variant="outlined"
          InputProps={{
            endAdornment: (
              <InputAdornment>
                <IconButton>
                  <SearchIcon />
                </IconButton>
              </InputAdornment>
            )
          }}
        />
      )}
    />

如果我只是添加搜索图标,它会被添加到自动完成组件下面

<Fragment>
  <Autocomplete
    id="combo-box-demo"
    options={top100Films}
    getOptionLabel={(option) => option.title}
    style={{ width: 300 }}
    renderInput={(params) => <TextField {...params} label="Combo box" variant="outlined" />}
  />
  <SearchIcon />
</Fragment>

https://codesandbox.io/s/material-demo-forked-qt99q?file=/demo.js

7rtdyuoh

7rtdyuoh1#

[this是输出][1] [1]:https://i.stack.imgur.com/JBSvO.png

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

export default function AddBusiness() {    

    const useStyles = makeStyles((theme: Theme) => ({
     margin: {
        padding: "10px 5px 5px 5px",
        borderRadius: 4,
        backgroundColor: theme.palette.common.white,
        margin: theme.spacing(0),
        border: "1px solid rgb(157, 157, 157)",
        width: "100%",
      },
    }));

    const classes = useStyles();

    const [cityData, setCityData] = React.useState([]);

    useEffect(() => {
        fetch('https://jsonplaceholder.typicode.com/todos')
        .then(data => data.json())
        .then(res => setCityData(res))
        .catch(error => console.log(error))
    }, [])

 return (  
    <Autocomplete
        id="combo-box-demo" 
        options={cityData} 
        getOptionLabel={(option: any) => option.title} 
        className={classes.margin} 
        style={{ paddingBottom: '8px' }} 
        renderInput={(params) => <TextField {...params} label="" 
        placeholder="Search City" 
            InputProps={{ ...params.InputProps, 
            startAdornment: ( <InputAdornment position="start"> <SearchIcon /> 
            </InputAdornment> ),
            disableUnderline: true }} />} 
    />
 )}
luaexgnf

luaexgnf2#

可以使用display: "flex"使父行对齐其子行。并且还将search icon对准在元件的中心,

<SearchIcon style={{ cursor: "pointer", padding: "17px" }} />

希望您也在期待同样的用例。让我知道如果你遇到任何问题。
示例演示:-https://codesandbox.io/s/material-demo-forked-v17jz?file=/demo.js

ego6inou

ego6inou3#

我写这篇文章是为了对任何人都有用,因为我能够解决它。在我的例子中,我通过将图标添加到文本字段来解决它。

<Autocomplete 
  options={arrayList}
  renderInput={(params) => 
    <TextField 
       {...params}
       InputProps={{
         ...params.InputProps,
          endAdornment: (
            <Icon icon='material-symbols:search' />
          )
       }}
    />
  } />

正如有人评论的那样,如果您使用自动完成的“forcePopupIcon”属性添加它,它会覆盖图标以打开列表。
endAdornment”属性表示必须将其添加到输入的末尾,您可以以相同的方式使用“startAdornment”将其添加到左侧。

laik7k3q

laik7k3q4#

这是您可以自定义弹出图标的方式

<Autocomplete
            className={classes.root}
            id="combo-box-demo"
            options={boards}
            getOptionLabel={(option) => option}
            forcePopupIcon={true}
            popupIcon={<SearchIcon />}
            renderInput={(params) => (
                <>
                    <TextField
                        placeholder="search"
                        {...params}
                        label="Combo box"
                        variant="filled"
                    />
                </>
            )}
        />

相关问题