#javascript #reactjs #full-text-search
#javascript #reactjs #полнотекстовый поиск
Вопрос:
Я создаю функцию поиска во внешнем интерфейсе, используя функцию фильтра, она не выдает никаких ошибок, но не отвечает, я ввожу слово в строке поиска и нажимаю enter, и ничего не работает. Из журналов сервера я могу сказать, что при нажатии enter он не отправляет запрос к API. Ниже приведен мой код:
function Search() {
const [data, setData] = React.useState([]);
const [searchTerm, setSearchTerm] = React.useState("");
const [searchResults, setSearchResults] = React.useState([]);
const handleChange = e => {
setSearchTerm(e.target.value);
};
const getData = () => {
axios.get("http://localhost:8000/CBView")
.then(res => (setData(res.data)))
}
React.useEffect(() => {
const results = data.filter(item =>
item.toLowerCase().includes(searchTerm)
);
setSearchResults(results);
}, [searchTerm]);
return (
<div className="App">
<input
type="text"
placeholder="Search"
value={searchTerm}
onChange={handleChange}
/>
<ul>
{searchResults.map(item => (
<li>{item}</li>
))}
</ul>
</div>
);
}
export default Search;
Комментарии:
1. Функция handleChange включена в 5-ю строку сверху @Joel
Ответ №1:
Глядя на код, я вижу, что вам нужно вызывать API при изменении условия поиска, пожалуйста, посмотрите на код ниже
import React from "react";
function Search() {
const [data, setData] = React.useState([]);
const [searchTerm, setSearchTerm] = React.useState("");
const [searchResults, setSearchResults] = React.useState([]);
const handleChange = e => {
setSearchTerm(e.target.value);
};
const getData = () => {
axios.get("http://localhost:8000/CBView").then(res => setData(res.data));
};
React.useEffect(() => {
if (searchTerm) {
getData();
}
}, [searchTerm]);
React.useEffect(() => {
if(data){
const results = data.filter(item =>
item.toLowerCase().includes(searchTerm)
);
setSearchResults(results);
}
}, [data]);
return (
<div className="App">
<input
type="text"
placeholder="Search"
value={searchTerm}
onChange={handleChange}
/>
<ul>
{searchResults.map(item => (
<li>{item}</li>
))}
</ul>
</div>
);
}
export default Search;
Комментарии:
1. Я думаю, что это может сработать, из того, что я могу проверить из журналов, теперь при вводе в строке поиска он отправляет запрос к API, но экран становится пустым, а использование моего процессора и оперативной памяти превышает 90%, и компьютер зависает.
2. я изменил api для реализации функции поиска в серверной части. Интерфейс обрабатывает вводимые данные поиска и извлекает результаты. Мое приложение по-прежнему зависает на моем компьютере. Что мне делать?
3. Я добавил условие для эффекта использования данных . Не могли бы вы попробовать это
Ответ №2:
Попробуйте исправить эту часть и посмотреть, работает ли она,
React.useEffect(() => {
const results = data.filter(item =>
item.toLowerCase().search(searchTerm.toLowerCase()) !== -1
);
setSearchResults(results);
}, [searchTerm]);