Я новичок в реакции и редукции и пытаюсь создать файловый менеджер. Я хочу реализовать функцию поиска для него. Вот как я делаю это сейчас:
State (Store)
const initialState = {
...
searchResultsList:[],
};
Действие для обновления состояния (отправлено при изменении поля ввода поиска)
export function search(searchString, address) {
return function(dispatch, getState) {
if (searchString.trim() === '') {
dispatch(refreshSearchResultList()); // clears the search results in store
} else {
searchFiles(searchString, address, file =>
dispatch(addFileToSearchResults(file))
);
}
};
}
searchFiles:
export default function searchFiles(name, currDir, func) {
// name -> searched string
// currDir -> current directory (since we need to search only in subfolders)
// func -> dispatching an action to update the search results in store
fs.readdir(currDir, { withFileTypes: true }, (err, files) => {
for (let dir of files) {
if (dir.name.toLowerCase().includes(name.toLowerCase())) {
func(dir)
}
if (dir.isDirectory()) {
searchFiles(name, path.join(currDir, dir.name), func);
}
}
});
}
Итак, теперь, если я ищу строку, скажу «а», а затем нажимаю другую клавишу, чтобы значение для поиска теперь было «ab», js будет фактически ждатьФункция searchFiles выполняется полностью перед началом поиска файлов с «ab» в их имени. Как я могу немедленно остановить выполнение первого и начать новый? Я мог бы использовать счетчик в качестве идентификатора поиска и передать его функции (так что в основном функция поиска будет проверять значение счетчика в хранилище и сравнивать его с его идентификатором поиска перед проверкой каждого имени файла), чтобы при выполнении нового поиска, проверка не удастся, и я вернусь вместо этого. Но мне не нравится этот подход. Есть ли способ, которым я мог бы сохранить структуру такой, какой она есть (в настоящее время функции searchFiles не нужно подключаться для сохранения или проверки какого-либо состояния) и при этом получить то, что я хочу? Или совершенно другой способ реализации этого, так как это выглядит как новичок, я хотел бы знать, как это делают опытные люди.