ReactJS 搜尋框中的固定選項


有時,開發人員在建立搜尋欄時需要在搜尋框中新增固定選項。例如,您正在開發一個 Web 應用程式,其中包含與汽車、腳踏車、其他車輛等相關的不同網頁。此外,您需要在每個網頁上新增一個搜尋欄。因此,您可能需要在搜尋欄中新增諸如汽車、腳踏車或某些汽車或腳踏車品牌的固定標籤以突出顯示。

在本教程中,我們將學習如何使用 Material UI 庫的 AutoComplete 元件在 ReactJS 中的搜尋框中新增固定選項。

使用者可以在 React 專案中執行以下命令以安裝 Material UI 庫。

npm install @mui/material @mui/styled-engine-sc styled-components

語法

使用者應遵循以下語法以使用 Material UI 的 AutoComplete 元件在搜尋欄中新增固定選項。

<Autocomplete
   multiple
   onChange={(event, newValue) => {
      // set fixed and selected options
   }
   value={currentValues}
   options={searchOptions}
/>

在上述語法中,currentValues 包含所有選定的值和固定值。

示例 1

在下面的示例中,我們使用了 Material UI 的 AutoComplete 元件來實現搜尋欄。我們將汽車品牌儲存在陣列中。此外,我們添加了“BMW”作為固定選項。

之後,我們將“multiple”屬性傳遞給 AutoComplete 元件以允許使用者選擇多個值。我們使用“searchOptions”作為 AutoComplete 元件的選項。此外,每當使用者從搜尋欄中選擇或刪除選項時,我們都會透過新增選定選項和固定選項來更改“currentValues”的值。

在輸出中,使用者可以觀察到“BMW”已預選,並且使用者無法將其刪除,因為它已停用。

import React, { useState } from "react";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";
import { Chip } from "@mui/material";
export default function App() {
   // Adding different car brands in search options
   let searchOptions = [
      "BMW",
      "Audi",
      "Mercedes",
      "Toyota",
      "Honda",
      "Ford",
      "Huyndai",
      "Kia",
      "Nissan",
      "Mazda",
      "Chevrolet",
      "Jeep",
      "Fiat",
      "Volkswagen",
      "Renault",
      "Volvo",
      "Suzuki",
      "Scion",
      "Smart",
      "Tesla"
   ];
   let fixedOptions = ["BMW"];
   let [currentValues, setValue] = useState([...fixedOptions]);
   return (
      <div>
         <h2>
            {" "}
            Using the <i> Material UI Autocomplete </i> component to implement fixed
            option search.{" "}
         </h2>
         <Autocomplete
            multiple
            Style={{ width: 400 }}
            autoComplete
            autoHighlight
            freeSolo
            onChange={(event, newValue) => {
               setValue([
                  ...fixedOptions,
                  ...newValue.filter((option) => fixedOptions.indexOf(option) === -1)
               ]);
            }}
            value={currentValues}
            options={searchOptions}
            renderInput={(data) => (
               <TextField {...data} variant="outlined" label="Search Box" />
            )}
         />
      </div>
   );
}

輸出

示例 2

在下面的示例中,我們也使用了 AutoComplete 元件來實現搜尋欄。在這裡,我們從 API 中提取搜尋選項的資料。從 API 中,我們獲取多個產品作為響應,並使用產品的標題作為搜尋選項。此外,我們為搜尋選項固定了兩個產品標題。

在輸出中,使用者可以觀察到搜尋欄中固定了兩個產品標題。

import React, { useState, useEffect } from "react";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";
export default function App() {
   // using the fetch API to get the data from the https://dummyjson.com/products
   const [searchOptions, setSearchOptions] = useState([]);
   const fetchSearchOptions = async () => {
      const response = await fetch("https://dummyjson.com/products");
      const data = await response.json();
      for (let i = 0; i < data.products.length; i++) {
         setSearchOptions((prev) => [...prev, data.products[i].title]);
      }
   };
   useEffect(() => {
      fetchSearchOptions();
   }, []);
   let fixedOptions = ["iPhone 9","OPPOF19"];
   
   //   fixedOptions.push(searchOptions[0]);
   
   //   fixedOptions.push(searchOptions[1]);
   let [currentValues, setValue] = useState([...fixedOptions]);
   return (
      <div>
         <h2>
            {" "}
            Using the <i> Material UI Autocomplete </i> component to implement fixed
            option search. {" "}
         </h2>
         <Autocomplete
            multiple
            Style={{ width: 400 }}
            autoComplete
            autoHighlight
            freeSolo
            onChange = {(event, newValue) => {
               setValue([
                  ...fixedOptions,
                  ...newValue.filter((option) => fixedOptions.indexOf(option) === -1),
               ]);
            }}
            value = {currentValues}
            options = {searchOptions}
            renderInput = {(data) => (
               <TextField {...data} variant="outlined" label="Search Box" />
            )}
         />
      </div>
   );
}

輸出

使用者學習瞭如何在 ReactJS 中向搜尋欄新增固定選項。在這裡,我們使用了 AutoComplete 元件來實現搜尋欄。使用者還可以探索 Material UI 官方網站上的 Autocomplete 元件的其他變體。

更新於: 2023年4月24日

67 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.