Я пытаюсь реализовать панель поиска, которая, когда пользователь начинает печатать, перемещает пользователя в новое представление, которое отображает результаты в этом представлении.
У меня есть следующий код, который позволяет пользователю начать поиск, устанавливает searchInput
в состояние и перемещает пользователя в новое представление.
Проблема в том, что я не могу передать и получить доступ к состоянию searchInput из компонента SearchBar в компонент SearchResultsView.
SearchBar.tsx
import * as React from 'react'
import { useState } from 'react';
import { useHistory } from 'react-router-dom';
export const SearchBar = () => {
const [searchInput, setSearchInput] = useState('');
const history = useHistory();
const handleInputChange = (value: string) => {
setSearchInput(value);
history.push('/search-results', { searchInput: searchInput });
}
return (
<input
type="text"
value={searchInput}
onChange={(e) => handleInputChange(e.target.value)}
/>
)
}
Вот SearchResultsView, где я хочу просто получить доступ к запросу searchInput (тогда я могу приступить к построению логики поиска c)
import * as React from 'react'
export const SearchResultsView = (searchInput) => {
// What I've tried that didn't work
const query = searchInput // returns empty
const state = useState('searchInput') // returns empty
return (
<div>
{/* Searching for: {searchInput} */}
</div>
)
}
Для получения дополнительной информации, вот как я настраиваю search-results
маршрут
export const App = () => {
return (
<HashRouter>
<div>
<AppSidebar/>
<Switch>
<Route path="/" exact render={() => <MainView/>}/>
<Route path="/search-results" exact render={() => <SearchResultsView/>}/>
</Switch>
</div>
</div>
</HashRouter>
)
}