ant design的Select下拉選擇器 帶搜尋功能

斑斕 小星願發表於2019-11-05

在做專案的過程中,可能會遇到 下拉框內容較多,為了方便使用者選擇加入檢索功能。

用法

利用ant design 中的select選擇器完成此功能。

首先 要獲取下拉選擇內容資料,和普通下拉選的資料結構一致,陣列物件 鍵值對。
然後把資料渲染到選擇器中,我在專案中 遇到的是資料較多,但是為了防止資料下拉較長,後端返回資料做了類似分頁處理,每次返回10條資料,那在獲取初始資料時其實就獲取了十條資料。
把資料放到一個空陣列中,然後渲染到選擇器中。

componentDidMount() {
    const { dispatch } = this.props;
    dispatch({
      type: 'project/searchProject',
      payload: { },
      callback: (res) => {
        this.setState({
          data: res.data
        })
      }
    });
  }
const children = [];
data.forEach(d => {
  children.push(<Option key={d.id}>{d.name}</Option>);
})
<Select
   showSearch
   allowClear
   labelInValue
   placeholder="請選擇專案"
   optionFilterProp="children"
   onSearch={this.handleSearch}
   onChange={this.handleChange}
   filterOption={(input, option) =>
     option.props.children[0].toLowerCase().indexOf(input.toLowerCase()) >= 0
   }
 >
   {children}
 </Select>

那在觸發搜尋功能的時候,其實只是搜尋了10條內容,那在onSearch中還有去請求其他資料。

handleSearch = value => {
  const { dispatch } = this.props;
   dispatch({
     type: 'project/searchProject',
     payload: {
       q: value
     },
     callback: (res) => {
       this.setState({
         data: res.data
       })
     }
   });
};

如果輸錯了搜尋內容,往回刪除修改的時候還需要去請求一次資料,觸發了onChange事件。

handleChange = value => {
    const { dispatch } = this.props;
    dispatch({
      type: 'project/searchProject',
      callback: (res) => {
        this.setState({
          data: res.data
        })
      }
    });
  };

現在功能完成了。
效果圖如下:
在這裡插入圖片描述
在這裡插入圖片描述

相關文章