Home > Back-end >  Create a button to clear MUI autocomplete
Create a button to clear MUI autocomplete

Time:01-04

I am trying to create a button to clear MUI autocomplete value and delete data from the UI.

using the below code I am able to delete data from the UI but onChange value still in the autocomplete and I am trying to clear it by clicking Clear Data & Autocomplete button

How can I do that?

this image before clicking the button

this image before clicking the button

this image after clicking the button

this image after clicking the button

as you can see the onChange value still in the autocomplete and I want it to be cleared because I clicked Clear Data & Autocomplete button already

import * as React from "react";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";

export default function ComboBox() {
  const [data, setData] = React.useState("");
  return (
    <>
      <Autocomplete
        disablePortal
        id="combo-box-demo"
        options={top100Films.map((movie) => movie.label)}
        onChange={(e, val) => setData(val)}
        sx={{ width: 300 }}
        renderInput={(params) => <TextField {...params} label="Movie" />}
      />
      <h1>{data}</h1>
      <button onClick={() => setData("")}>Clear Data & Autocomplete</button>
    </>
  );
}
const top100Films = [
  { label: "The Shawshank Redemption", year: 1994 },
  { label: "The Godfather", year: 1972 },
  { label: "The Godfather: Part II", year: 1974 },
  { label: "The Dark Knight", year: 2008 },
  { label: "12 Angry Men", year: 1957 },
  { label: "Schindler's List", year: 1993 },
  { label: "Pulp Fiction", year: 1994 }
];

CodePudding user response:

You just need to make the Autocomplete a controlled input by settings it's value to your data state.

<>
  <Autocomplete
    disablePortal
    id="combo-box-demo"
    options={top100Films.map((movie) => movie.label)}
    onChange={(e, val) => setData(val)}
    // Added value here
    value={data}
    sx={{ width: 300 }}
    renderInput={(params) => <TextField {...params} label="Movie" />}
  />
  <h1>{data}</h1>
  <button onClick={() => setData("")}>Clear Data & Autocomplete</button>
</>;

CodeSandBox : https://codesandbox.io/s/serene-snyder-1gxnlg?file=/demo.js

  • Related