Фильтрация пользователей с помощью функции фильтра — Реагируйте с next.js и машинописный текст

#reactjs #typescript #next.js

Вопрос:

я разрабатываю свое внешнее приложение с помощью next.js и машинописный текст, и я пытаюсь отфильтровать массив, чтобы показывать только тех пользователей, которых вы ищете, как в строке поиска, но он возвращает меня всегда неопределенным.

Позвольте мне показать вам немного моего кода.

Во-первых, функция, которую я сделал filteredUsers

 const [searchBar, setSearchBar] = useState<boolean>(false);

  const [results, setResults] = useState<string>("");

  // Searchbar users

  if (typeof window !== "undefined") {
    const userId: dataObject = JSON.parse(localStorage.getItem("Auth"));
    var { data }: multipleUsers = useSWR(
      "http://localhost:5000/api/user/allU/"   userId.user.id
    );
  }

  const filteredUsers = useMemo(() => {
    data !== undefined amp;amp;
      data.filter(user => {
        return user.name.toLowerCase().includes(results.toLowerCase());
      });
  }, [results]);

  console.log(filteredUsers);
  console.log(results);
 

Теперь интерфейсы, позволяющие понять, какого типа данных я ожидаю

 // User representation

type user = {
  id?: string;
  name?: string;
  email?: string;
  password?: string;
  friends?: [];
  banner?: string;
  perfil?: string;
};

export interface IuserData {
  data: user;
}

export type multipleUsers = { data: user[] };

 

Теперь позвольте мне показать вам, что показывает мне console.log()

введите описание изображения здесь

Первое значение-это данные, которые я получаю.

Второй — результат моей функции, которая всегда не определена

Третий-это значение моего вклада

Что я могу сделать, чтобы получить результаты, которые я ищу, основываясь на значении моих входных данных ?

Спасибо, что уделили мне время !

Ответ №1:

Добавьте data ко useMemo второму аргументу, поэтому [results] обратитесь к [data, results] . В противном случае он всегда использует данные в качестве начального значения, с неопределенным

Комментарии:

1. Спасибо за ваш ответ, но он все еще не определен, я попытался назначить data.filter(user => { вернуть имя пользователя.toLowerCase (). включает(результаты. toLowerCase()); }); к переменной, и я консольно регистрирую ее, и она возвращает false и true, кажется, что она работает нормально, но я должен выяснить, почему она продолжает давать мне неопределенное

2. Я отключил функцию useMemo, и все, что она отлично работает, почему с помощью useMemo это дало бы мне неопределенность? Мне нужно его использовать

3. что, если вы поместите памятку об использовании внутри if блока? таким образом, usememo инициируется только тогда, когда определено значение `useSwr

4. Я думаю, что это поможет, спасибо за ваши ответы !!