Здравствуйте. Не пойму как работает поиск useFuse и Fuse.js?!
===
Пример из источник -
https://vueuse.org/integrations/useFuse/#install-f...
const data = [
'John Smith',
'John Doe',
'Jane Doe',
'Phillip Green',
'Peter Brown',
]
const input = ref('Jhon D')
const { results } = useFuse(input, data)
/*
* Results:
*
* { "item": "John Doe", "index": 1 }
* { "item": "John Smith", "index": 0 }
* { "item": "Jane Doe", "index": 2 }
*
*/
===
Ок, с массивом строк работает! Как только я подтягиваю данные из -
https://fakestoreapi.com/products больше ничего не работает, пустой массив.
Пробую подключить Fuse.js на прямую.
===
const options = {
includeScore: true,
// Search in `author` and in `tags` array
keys: ['author', 'tags']
}
const fuse = new Fuse(list, options)
const result = fuse.search('tion')
===
Тоже пустой массив... Ничего не понял.
Мой код
<script setup lang='ts'>
import { ref, watch } from 'vue'
import Fuse from 'fuse.js'
import apiService from '@/services/apiService'
type DataItem = {
id: number
title: string
price: number
description: string
category: string
image: string
rating: {}
}
const input = ref('')
const loading = ref(false)
const data = ref<DataItem []>([])
const options = {
includeScope: true,
keys: ['title']
}
const fuse = new Fuse(data.value, options)
const results = fuse.search(input.value)
console.log('results:', results)
const getProducts = async () => {
try {
loading.value = true
const response = await apiService.getProducts()
data.value = response.data
} catch (error) {
console.log(error)
} finally {
loading.value = false
}
}
watch(input, () => {
if (input.value.length > 1) {
getProducts()
} else {
data.value = []
}
})
</script>