Как организовать поиск, используя две компоненты?

Как реализовать переход от изначального компонента поиска к компоненту списка товаров после ввода запроса в поисковой строке, и оставить возможность использовать поиск в компоненте списка товаров для дальнейших запросов, не меняя каждый раз компоненты? Можно ли получить пример с пояснением, чтобы убедиться, что я выбрал правильный подход?
  • 28 января 2024 г. 16:48
Ответы на вопрос 1
Организовать поиск, используя две компоненты, можно, создав компонент для поиска (`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`, позволяя пользователю инициировать новый поиск прямо из списка результатов.
Похожие вопросы