Организовать поиск, используя две компоненты, можно, создав компонент для поиска (`SearchBar`) и компонент для отображения списка товаров (`ProductList`). Эти два компонента можно связать через состояние, которое будет передаваться от `SearchBar` к `ProductList`. В качестве фреймворка или библиотеки можно использовать React.
Вот общий сценарий того, как это может работать:
1. `SearchBar` содержит поле ввода и кнопку поиска. Оно отвечает за обновление состояния с поисковым запросом.
2. `ProductList` получает поисковый запрос в качестве пропса (или через глобальное состояние, такое как Redux, MobX, или контекст API в React) и отображает список товаров с учетом этого запроса.
Вот как это может выглядеть на React:
```javascript
// SearchBar.js
import React, { useState } from 'react';
const SearchBar = ({ onSearch }) => {
const [searchTerm, setSearchTerm] = useState('');
const handleSearch = () => {
onSearch(searchTerm);
};
return (
<div>
<input
type="text"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder="Введите поисковый запрос..."
/>
<button onClick={handleSearch}>Поиск</button>
</div>
);
};
export default SearchBar;
// ProductList.js
import React from 'react';
const ProductList = ({ searchQuery }) => {
// Здесь будет логика подгрузки и фильтрации товаров по параметру searchQuery
// Для примера просто отобразим поисковый запрос
return (
<div>
Поиск по запросу: {searchQuery}
{/* здесь будет список товаров */}
</div>
);
};
export default ProductList;
// App.js
import React, { useState } from 'react';
import SearchBar from './SearchBar';
import ProductList from './ProductList';
const App = () => {
const [searchQuery, setSearchQuery] = useState('');
const handleSearch = (query) => {
setSearchQuery(query);
};
return (
<div>
<SearchBar onSearch={handleSearch} />
<ProductList searchQuery={searchQuery} />
</div>
);
};
export default App;
```
В этом примере `App.js` содержит главное состояние и функцию `handleSearch`, которая изменяет это состояние. Когда пользователь вводит текст в `SearchBar` и нажимает кнопку поиска, `handleSearch` вызывается и обновляет состояние `searchQuery`. `ProductList` использует `searchQuery` для отображения результата поиска. Поскольку `searchQuery` хранится в состоянии `App`, это позволяет обновлять список товаров без смены компонента. Можно также интегрировать логику фильтрации прямо в `ProductList` на основе принятого поискового запроса.
Компонент `SearchBar` также может быть использован непосредственно в рамках `ProductList`, позволяя пользователю инициировать новый поиск прямо из списка результатов.