簡體   English   中英

單擊下拉選項時如何顯示相關數據?

[英]How to display the data related when an option is clicked on drop down?

我有一個來自查詢的下拉列表,當我單擊該選項時,應顯示相關數據。 我有這個下拉菜單,如圖所示

圖片 .

如何只顯示一次選項。

我有以下代碼:

 class StoreLocator extends PureComponent {
    constructor(props) {
        super(props)

        this.state = {
            options : [],
        }
    }

    getStoreLocatorDropdown(){
        return(
            <div>
                <select>
                     <option value="" hidden>Select product/service type</option>
                    {
                        this.state.options.map((obj) => {
                            return <option value={obj.id} changeOption={this.handleChange}>{obj.name}</option>
                        })
                    }
                </select>
            </div>
        )
    }

    handleChange(){
        console.log("clicked")
    }


    async componentDidMount(){
        let storeLocatorQuery = StoreLocatorInstance.getStoreLocator()
        await fetchQuery(storeLocatorQuery).then((data) => {
           this.setState({
               options : data.storeLocatorLocations.items
           })
           this.getStoreLocatorDropdown()
        },
        (error) => console.log(error)
        )
        
    }

    render() {
        return (
            <div>
                <h1>Store Locator</h1>
                <div>
                    {this.getStoreLocatorDropdown()}
                </div>
            </div>
        )
    }
}

export default StoreLocator

如何在重復值時僅顯示一次選項。 以及如何使其可點擊並顯示其相關數據

似乎您要做的只是在下拉列表中顯示唯一/不同的選項。

您可以解決此問題的一種手動方法是首先過濾您的選項數據源。 在您的情況下,它是“this.state.options”

在您的“componentDidMount”function 中,您可以在將值設置到 state 之前對其進行過濾:

 var data = [
  { id: 1, name: 'Partsandservices' }, 
  { id: 2, name: 'Partsandservices' }, 
  { id: 3, name: 'Petromin' }
];

data.map(item => item.name)
  .filter((value, index, self) => self.indexOf(value) === index)
// this should return you ["Partsandservices", "Petromin"]

但是,這不是推薦的方法,因為這種重復的根本原因應該從最深層次解決,即“StoreLocatorInstance.getStoreLocator()”。

由於返回的選項是“Partsandservices”上的重復名稱,它是否包含不同的含義?

可能是位置 A 的 Partsandservices 和位置 B 的 Partsandservices? 還是將兩個相同的名稱返回到您的應用程序是一個錯誤?

你應該檢查一下。

要阻止重復值顯示在您的選項列表中,您可以添加一個額外的數組(duplicateCheck),以確保這些值不會重復
在您的選項列表中:

let duplicateCheck=[];

 this.state.options.map((obj) => {
if(duplicateCheck.includes(obj.name))
{
 return (null); 
}
else
{
duplicateCheck.push(obj.name);  
return <option value={obj.id} changeOption={this.handleChange}>{obj.name}</option>}

} 
                  

  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM