Реализуете поиск файлового менеджера с помощью javascript? - PullRequest
1 голос
/ 30 октября 2019

Я новичок в реакции и редукции и пытаюсь создать файловый менеджер. Я хочу реализовать функцию поиска для него. Вот как я делаю это сейчас:

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 не нужно подключаться для сохранения или проверки какого-либо состояния) и при этом получить то, что я хочу? Или совершенно другой способ реализации этого, так как это выглядит как новичок, я хотел бы знать, как это делают опытные люди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...