#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 инициируется только тогда, когда определено значение `useSwr4. Я думаю, что это поможет, спасибо за ваши ответы !!