React Hooks поисковый ввод, нажатие клавиши, ввод страницы результатов перенаправления

У меня есть компонент поиска. При нажатии клавиши ввода введите перенаправление на страницу результатов. Но я не могу получить отфильтрованные результаты поиска. Как я могу получить отфильтрованный json? Вот код, может кто поможет?

https://codesandbox.io/s/inspiring-swanson-t8fi1

удалите обработчик нажатия клавиши, если вы не хотите перенаправлять на нажатие клавиши

Nilesh Patel 10.12.2020 10:33

@NileshPatel нет, я хочу перенаправить, но я хочу получить отфильтрованные результаты на странице результатов

paws 10.12.2020 10:35

Поскольку между композициями нет родительско-дочерних отношений, вы фильтруете данные и затем перемещаетесь, вам нужно использовать контекст или редукцию, чтобы сохранить запрошенные вами идентификаторы игровых объектов, получить их на SearchResult comp, а затем отфильтровать данные.

kboul 10.12.2020 11:09

@kboul как я могу это сделать?

paws 10.12.2020 11:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
275
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот демонстрация того, как работает Песочница. Конечно, вам потребуется рефакторинг кода.

Идея заключается в том, что вам нужно передать искомое слово в параметре запроса URL-адреса при нажатии клавиши:

history.push(`/SearchResult/?search=${search}`);

На этой странице вам нужно получить параметр из URL и с помощью useLocation:

import { useLocation } from "react-router-dom";

И проанализируйте результаты с помощью URLSearchParams:

const search = new URLSearchParams(location.search).get("query");

Пожалуйста, ознакомьтесь с более подробной информацией в приведенном примере.

спасибо ваш ответ. Я не мог полностью понять, в route.js вы импортируете строку запроса. Но как я могу получить это?

paws 10.12.2020 13:41

Я больше не использую Routere.js. Если вы проверите код, вы увидите, что он нигде не используется в коде.

2u4u 10.12.2020 14:40
Ответ принят как подходящий

Сначала добавьте это к своим маршрутам. Потому что вы указали только SearchResult маршрут, а не SearchResultPage, несмотря на то, что они используют один и тот же комп.

{
    path: `/SearchResultPage`,
    component: SearchResult
  }

Контекст настройки:

export const Context = createContext();

и провайдер:

const Provider = ({ children }) => {
  const [gameIds, setGameIds] = useState([]);
  const provider = useMemo(() => ({ gameIds, setGameIds }), [
    gameIds,
    setGameIds
  ]);

  return (
    <Context.Provider value = {{ ...provider }}>{children}</Context.Provider>
  );
};

чтобы иметь возможность сохранять переменные глобально.

сохраните идентификаторы в массив в поиске:

const { setGameIds } = useContext(Context);

...
setGames(gameData);
setSearch(e.target.value);
setGameIds(gameData.map(({ id }) => id));

получить их на SearchResult

const { gameIds } = useContext(Context);
...
data.filter(({ id }) => gameIds.includes(id))

Демо

Большое спасибо! Ну а когда нет результата, можно показать другой div?

paws 10.12.2020 15:04

Да. Используйте тернарный оператор f.i gameIds.length === 0 ? 'show a message' : what you already doing... или if, еще что вам больше подходит.

kboul 10.12.2020 15:06

Можно еще вопрос по этому компоненту?

paws 22.12.2020 04:39

Другие вопросы по теме