2016-11-28 36 views
0

不知道這是否是一個錯誤或我的反應知識缺乏。我沒有得到任何錯誤,但過濾器不起作用。如果我把函數寫入同一個文件中,過濾器工作,我做錯了什麼?材料UI進口過濾功能爲<自動完成過濾= />

Filters.js

const filterResults = (searchText, key) => { 
if (searchText.length === 0) { 
    return false; 
} 
    const compareString = key.toLowerCase(); 
    searchText = searchText.toLowerCase(); 

    const subMatchKey = key.substring(0, searchText.length); 
const distance = AutoComplete.levenshteinDistance(searchText.toLowerCase(), subMatchKey.toLowerCase()); 
    let searchTextIndex = 0; 
    for (let index = 0; index < key.length; index++) { 
    if (compareString[index] === searchText[searchTextIndex]) { 
     searchTextIndex += 1; 
    } 
    } 

    return searchText.length > 3 ? distance < 2 : distance === 0; 
    return searchTextIndex === searchText.length; 
}; 

export default filterResults; 

Main.js

import filterResults from '../AutoComplete/Filters' 

    <AutoComplete 
     dataSource={location} 
     onUpdateInput={this.onInputChange} 
     searchText={this.state.city} 
     filter={this.filterResults} 

     /> 
+0

您不應該使用「this」。在filter = {this.filterResults}上,因爲它不是你的組件的成員。 –

+0

仍然無法按預期工作。 Uncaught ReferenceError:未定義自動完成 – Polisas

+0

您還需要添加「從'material-ui/AutoComplete'導入自動完成';」到你的Filters.js文件,因爲你在這裏引用一個靜態方法:「const distance = AutoComplete.levenshteinDistance(...)...」 –

回答

0

嘗試使用此

<AutoComplete 
    dataSource={location} 
    filter={AutoComplete.caseInsensitiveFilter} 
    /> 

材料的UI具有內置的過濾功能