在这里反应原生菜鸟, 我想知道是否可以使用sqlite的FullTextSearch功能做出反应,如果有的话,请告诉我在哪里可以了解更多信息。 谢谢!
答案 0 :(得分:1)
使用 Realm数据库实现React Native , Realm是一个面向对象的数据库。 OO模型使其比SQLite快10倍,并使您免于运行大量查询,这对于典型的SQL数据库来说是常见的事情 和 fuse.js 可以帮助您搜索文本。
答案 1 :(得分:0)
realm = new Realm({
schema: [StudentScheme]
})
const mydata = realm.objects('Product_Info');
let filteredData = [];
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] $0 OR prodDesc LIKE[c] $0", "*" + obj + "*")
Object.keys(databaseSearchResult).map(key => {
filteredData.push(databaseSearchResult[key])
})
});
<SearchBar
placeholder="Type Here..."
onChangeText={this.updateSearch}
value={this.state.search}
/>
<FlatList
data={this.state.filteredData}
renderItem={this.rowRenderer}
keyExtractor={(item, key) => key}
/>
================================================ =====================
updateSearch = search => {
this.setState({search: search}, () => this.searchText(search.trim()));
};
searchText = (search) => {
console.log(" Detail Activity ------------- search -->" + search);
realm = new Realm({
schema: [StudentScheme]
})
const mydata = realm.objects('Product_Info');
let filteredData = {};
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] $0 OR
prodDesc LIKE[c] $0", "*" + obj + "*")
Object.keys(databaseSearchResult).map(key => {
filteredData[`${Object.keys(filteredData).length}`] =
databaseSearchResult[key]
})
});
this.setState({
filteredData
}, () => {
console.log('Search-------------------------------FILTER DATA', this.state.filteredData)
let dataProvider = new DataProvider((r1, r2) => r1 !== r2)
let updatedDataProvider=dataProvider.cloneWithRows(filteredData)
this.setState({dataProvider: updatedDataProvider},()=>{
console.log("CALLBACKK ", this.state.dataProvider)
})
})
}
<SearchBar
placeholder="Type Here..."
onChangeText={this.updateSearch}
value={this.state.search}
/>
{
Object.keys(this.state.filteredData).map((key)=>(
this.rowRenderer(null, this.state.filteredData[key])
))
}
答案 2 :(得分:0)
var Realm = require('realm');
let realm;
let dataProvider = new DataProvider((r1, r2) => r1 !== r2)
realm = new Realm({
schema: [StudentScheme]
})
state = {
search: '',
dataProvider: new DataProvider((r1, r2) => r1 !== r2).cloneWithRows({}),
filteredData: {}
};
updateSearch = search => {
this.setState({search: search}, () => this.searchText(search.trim()));
};
searchText = (search) => {
console.log(" Detail Activity ------------- search -->" + search);
const mydata = realm.objects('Product_Info');
let filteredData = [];
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] $0 OR prodDesc LIKE[c] $0 OR prodPrice LIKE[c] $0 ", "*" + obj + "*" )
Object.keys(databaseSearchResult).map(key => {
filteredData.push(databaseSearchResult[key])
})
});
this.setState({
filteredData
}, () => {
console.log('Search-------------------------------FILTER DATA \n', this.state.filteredData)
console.log('Search-------------------------------FILTER DATA--------------- \n');
})
}
fetchDB = () => {
var mydata = realm.objects('Product_Info');
this.setState({dataProvider: dataProvider.cloneWithRows(mydata), filteredData: mydata}) //TODO ...
}
<FlatList
data={this.state.filteredData}
renderItem={this.rowRenderer}
keyExtractor={(item, key) => key}
/>