#javascript #reactjs #react-router
#javascript #reactjs #реагировать-маршрутизатор
Вопрос:
Я создаю веб-приложение для поиска укрытий с простым API в качестве проекта, я сопоставляю массив убежищ и создаю файл ShelterCard
, содержащий основную информацию об этом, у меня была идея, и в API есть много данных, которые останутся неиспользованными, поэтому я хотел реализовать какой-то типэто onClick
приведет вас к более крупному компоненту с дополнительной информацией о конкретном убежище, я раньше этого не делал, поэтому я не уверен, как реализовать эту функциональность. Моя идея могла бы использовать что-то вроде идентификатора shelter в параметрах, а затем использовать его с ShelterProfile для отображения полной информации. До сих пор я не мог даже console.log
что-то делать, когда я нажимаю на каждую карту, поэтому сначала мне нужно знать, как это реализовать onClick
. Я использую react-router для маршрутов и react-query для извлечения данных. Я открыт для любых других идей по подходу к этому.
export const ShelterComponent = () => {
const history = useHistory()
console.log(history)
async function fetchData() {
const response = await fetch(SHELTER_URL)
const data = await response.json()
return data
}
const {status, data, error} = useQuery("shelter", fetchData)
// const {features} = data
if(status==="loading"){return <p>Loading </p>}
if(error) return <p>something went worng...</p>
if(data)
return (
<>
{data.features.map((shelter, i)=> {
return <ShelterCard key ={i} shelter={shelter}/>
})}
</>
)
}
Комментарии:
1. Добро пожаловать в StackOverflow! Пожалуйста, не забудьте опубликовать весь соответствующий код и постарайтесь уточнить, какую проблему вы пытаетесь решить. Похоже, у вас возникли проблемы с запуском события click, но это не отражено в вашем примере. Что вы пробовали? Как насчет подхода, который не работал? и т.д.
Ответ №1:
Похоже, вы хотите реализовать что-то вроде домашнего экрана Netflix. при нажатии на любую карточку фильма открывается всплывающее окно большего размера с дополнительной информацией о том же фильме или сериале.
вместо перенаправления на другую страницу вот что вы можете сделать. поддерживайте одно состояние selectedShelterId и изначально установите для него значение «false».
const [selectedShelterId,setSelectedShelterId]=useState(false)
добавьте onClick ко всем картам, и всякий раз, когда пользователь нажимает на любую карту, установите selectedShelterId на идентификатор убежища, который находится на карте убежища.
{data.features.map((shelter, i)=> {
return (
<div onClick={()=>setSelectedShelterId(shelter.id)}>
<ShelterCard key ={i} shelter={shelter}/>
</div>
)
})}
создать на компонентах (например. ShelterInfoPopup), где вы можете передать этот selectedShelterId в качестве реквизита, и с этим идентификатором вы можете вызвать API, чтобы получить и отобразить информацию о убежище по своему усмотрению.
и сделайте этот компонент ShelterInfoPopup фиксированным в верхней части страницы, и он должен открываться только при наличии selectedShelterId.
{selectedShelterId amp;amp; <ShelterInfoPopup shelterID={selectedShelterId}/>}
и добавьте один крест или какую-то опцию во всплывающем окне, которая может закрыть всплывающее окно. для этого вам нужно установить selectedShelterId как false .
вы можете использовать useEffect и параметры запроса, чтобы сделать его более динамичным и сохранить selectedShelterId в параметрах запроса. чтобы открыть страницу с уже открытым всплывающим окном.