I want to use Autocomplete
component for input tags. I'm trying to get the tags and save them on a state so I can later save them on the database. I'm using functions instead of classes in react. I did try with onChange
, but I didn't get any result.
<div style={{ width: 500 }}> <Autocomplete multiple options={autoComplete} filterSelectedOptions getOptionLabel={(option) => option.tags} renderInput={(params) => ( <TextField className={classes.input} {...params} variant="outlined" placeholder="Favorites" margin="normal" fullWidth /> )} /> </div>;
To get the value in the React Material-UI autocomplete, we can get the selected values from the onChange callback. We add the Autocomplete from the @material-ui/lab module. And we set the options prop to the top5films array to add the options for the autocomplete.
The autocomplete is a normal text input enhanced by a panel of suggested options.
To hide browser autocomplete with React Material UI Autocomplete and TextField, we can set inputProps. autocomplete to 'off' . We set inputProps. autoComplete to 'off' in the renderInput function to disable browser autocomplete in the text field.
As Yuki already mentioned, make sure you did use the onChange
function properly. It receives two parameters. According to the documentation:
Signature:
function(event: object, value: any) => void
.
event
: The event source of the callback
value
: null (The value/values within the Autocomplete component).
Here's an example:
import React from 'react'; import Chip from '@material-ui/core/Chip'; import Autocomplete from '@material-ui/lab/Autocomplete'; import TextField from '@material-ui/core/TextField'; export default class Tags extends React.Component { constructor(props) { super(props); this.state = { tags: [] }; this.onTagsChange = this.onTagsChange.bind(this); } onTagsChange = (event, values) => { this.setState({ tags: values }, () => { // This will output an array of objects // given by Autocompelte options property. console.log(this.state.tags); }); } render() { return ( <div style={{ width: 500 }}> <Autocomplete multiple options={top100Films} getOptionLabel={option => option.title} defaultValue={[top100Films[13]]} onChange={this.onTagsChange} renderInput={params => ( <TextField {...params} variant="standard" label="Multiple values" placeholder="Favorites" margin="normal" fullWidth /> )} /> </div> ); } } const top100Films = [ { title: 'The Shawshank Redemption', year: 1994 }, { title: 'The Godfather', year: 1972 }, { title: 'The Godfather: Part II', year: 1974 }, { title: 'The Dark Knight', year: 2008 }, { title: '12 Angry Men', year: 1957 }, { title: "Schindler's List", year: 1993 }, { title: 'Pulp Fiction', year: 1994 }, { title: 'The Lord of the Rings: The Return of the King', year: 2003 }, { title: 'The Good, the Bad and the Ugly', year: 1966 }, { title: 'Fight Club', year: 1999 }, { title: 'The Lord of the Rings: The Fellowship of the Ring', year: 2001 }, { title: 'Star Wars: Episode V - The Empire Strikes Back', year: 1980 }, { title: 'Forrest Gump', year: 1994 }, { title: 'Inception', year: 2010 }, ];
I needed to hit my api on every input change to get my tags from backend!
Use Material-ui onInputChange if you want to get your suggested tags on every input change!
this.state = { // labels are temp, will change every time on auto complete labels: [], // these are the ones which will be send with content selectedTags: [], } } //to get the value on every input change onInputChange(event,value){ console.log(value) //response from api .then((res) => { this.setState({ labels: res }) }) } //to select input tags onSelectTag(e, value) { this.setState({ selectedTags: value }) } <Autocomplete multiple options={top100Films} getOptionLabel={option => option.title} onChange={this.onSelectTag} // click on the show tags onInputChange={this.onInputChange} //** on every input change hitting my api** filterSelectedOptions renderInput={(params) => ( <TextField {...params} variant="standard" label="Multiple values" placeholder="Favorites" margin="normal" fullWidth />
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With