2016-11-28 32 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具有内置的过滤功能