ВЪВЕДЕНИЕ:
В това ръководство ще научите как да нулирате селекции и полета за въвеждане в компонента Autocomplete на Material-UI. Това подобрява потребителското изживяване и взаимодействие, особено след изпращане на формуляр или подобни събития.
ОБОБЩЕНИЕ:
Стъпка 1: Настройте средата за разработка, като инсталирате Material-UI и свързани пакети.
Стъпка 2: Импортирайте компонента за автоматично довършване за използване.
Стъпка 3: Внедрете функционалността за изчистване чрез инициализиране на състояние, прилагане на механизма за изчистване и извикване на нулирането.
Заключение: Следвайки тези стъпки, можете безпроблемно да интегрирате изчистването функционалност за по-плавно потребителско изживяване.
СТЪПКИ:
Стъпка 1. Създаване на вашата среда:
Преди да се задълбочите в процеса на внедряване, осигурете правилната инсталация на Material-UI във вашия проект. Използвайте npm или yarn за инсталиране на необходимите пакети:
npm install @mui/material @emotion/react @emotion/styled
За да потвърдите успешната инсталация, проверете вашия package.json
за следните подробности за пакета:
"dependencies": { "@emotion/react": "^**.**.*", "@emotion/styled": "^**.**.*", "@mui/material": "^**.**.**" }
Стъпка 2: Импортирайте компонента за автоматично довършване
import Autocomplete from '@mui/material/Autocomplete';
Стъпка 3: Внедряване на ясна функционалност (последна стъпка)
1. Инициализирайте състояние:
Дефинирайте променлива на състоянието, която ще бъде променена при извикване на функцията, отговорна за задействане на процеса на изчистване:
const [resetInputField, setResetInputField] = useState(false);
2. Приложете механизъм за изчистване:
Вградете променливата “resetInputField” в пропорцията “key” на компонентите за автоматично довършване, предназначени за изчистване, както е показано по-долу:
<div className="inputsWrapper"> <> <Autocomplete disablePortal className="singleInput" id="tags-outlined" onChange={(e, option) => setUserInfo(e, option, "leastFavorite")} getOptionLabel={(option) => option.title} options={top100Films} key={resetInputField} renderInput={(params) => ( <TextField {...params} label="Least Favorites" placeholder="Least Favorites" /> )} /> </> <> <Autocomplete disablePortal multiple onChange={(e, option) => setUserInfo(e, option, "favorites")} className="multipleSelect" id="tags-outlined" options={top100Films} getOptionLabel={(option) => option.title} key={resetInputField} renderInput={(params) => ( <TextField {...params} label="Favorites" placeholder="Favorites" /> )} /> </> </div>
Забележка: За да избегнете грешката „Намерени са две деца с един и същи ключ“, уверете се, че тези компоненти не са директни братя и сестри. Поставете ги в подходящ контейнер като фрагмент или div, както е показано по-горе.
3. Извикайте Reset:
Във вашия манипулатор за изпращане на формуляри извикайте функцията setResetInputField, за да нулирате полетата за въвеждане, както е показано по-долу:
// FUNCTION TO HANDLE FORM SUBMISSION const handleFormSubmission = async (event) => { event.preventDefault(); setLoading(true); // API CALL SIMULATION try { setTimeout(() => { setLoading(false); setResetInputField((prev) => !prev); }, 2000); } catch (error) { setLoading(false); console.log(error); } }; // END OF FUNCTION TO HANDLE FORM SUBMISSION
Заключение
Като следвате тези стъпки, можете безпроблемно да интегрирате функцията за изчистване в компонента Autocomplete на Material-UI, като гарантирате по-плавно потребителско изживяване. Вашите полета за въвеждане ще бъдат нулирани според нуждите след изпращане на формуляра.
Бонус: Пълният код, за справка:
import { useState } from "react"; import "./App.css"; import { Autocomplete, TextField } from "@mui/material"; function App() { // LOADING STATE WHEN FORM IS SUBMITTED const [loading, setLoading] = useState(false); // VARIABLE TO RESET INPUT FIELDS AFTER FORM SUBMISSION const [resetInputField, setResetInputField] = useState(false); // OPTIONS ARRAY 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, } ]; // FUNCTION TO HANDLE FORM SUBMISSION const handleFormSubmission = async (event) => { event.preventDefault(); setLoading(true); // API CALL SIMULATION try { setTimeout(() => { setLoading(false); setResetInputField((prev) => !prev); }, 2000); } catch (error) { setLoading(false); console.log(error); } }; // END OF FUNCTION TO HANDLE FORM SUBMISSION const setUserInfo = (e, data, type) => { console.log(e, data, type); }; return ( <div className="formWrapper"> <form className="form" onSubmit={handleFormSubmission}> <div className="inputsWrapper"> <> <Autocomplete disablePortal className="singleInput" id="tags-outlined" onChange={(e, option) => setUserInfo(e, option, "leastFavorite")} getOptionLabel={(option) => option.title} options={top100Films} key={resetInputField} renderInput={(params) => ( <TextField {...params} label="Least Favorites" placeholder="Least Favorites" /> )} /> </> <> <Autocomplete disablePortal multiple onChange={(e, option) => setUserInfo(e, option, "favorites")} className="multipleSelect" id="tags-outlined" options={top100Films} getOptionLabel={(option) => option.title} key={resetInputField} renderInput={(params) => ( <TextField {...params} label="Favorites" placeholder="Favorites" /> )} /> </> </div> <button type="submit" className="submitFormBtn" disabled={loading}> Submit </button> </form> </div> ); } export default App;