Здравствуйте! У меня всё работает корректно, и поисковик функционирует должным образом. Однако я хотел бы, чтобы поле ввода находилось в верхней части сайта. Я пробовал разные подходы, но, к сожалению, ничего не вышло. Можете помочь мне с решением этой задачи?
<br/> components/jsph/JSPH-table.jsx
<pre><code class="javascript">import classes from "./Jsph.module.css";
import useSWR from "swr";
import toast from "react-hot-toast";
import { useState } from "react";
import { ObjTable, SearchForm } from "../ObjTable";
const
ADD = 'add',
API_URL = "http://localhost:3333/items",
CART_URL = "http://localhost:3333/cart",
fetcher = async () => {
const res = await fetch(API_URL);
if (!res.ok) throw new Error("fetcher" + res.status);
return await res.json();
},
infofetcher = async () => {
console.log("infofetcher",);
const pr = fetcher();
toast.promise(pr, {
loading: 'Загрузка',
success: 'Авто-обновление',
error: (err) => `${err.toString()}`,
});
return await pr
};
export function JSPHTable() {
const
{ data, error, isLoading, isValidating, mutate } = useSWR(API_URL, infofetcher, { revalidateOnFocus: false }),
[addItem, setAddItem] = useState(),
onClick = async event => {
const
action = event.target.closest('[data-action]')?.dataset?.action,
id = +event.target.closest('[data-id]')?.dataset?.id;
console.log("action and id", action, id);
console.log("addItem", addItem);
console.log("data", data);
if (!action) return;
let
optimisticData;
const
getPromise = () => {
switch (action) {
case ADD:
const newObj = {};
Чтобы разместить форму поиска в заголовке вашего сайта, вам нужно будет немного изменить структуру вашего компонента и добавить новую форму в нужное место. Ниже описан общий план, который можно использовать для достижения этой цели.
### Шаги по добавлению формы поиска в заголовок
1. **Создайте компонент формы поиска**: если у вас его еще нет, вы можете создать отдельный компонент для формы поиска.
2. **Импортируйте компонент формы поиска**: вставьте его в ваше основное представление, так чтобы он находился в верхней части.
3. **Стилизация**: убедитесь, что форма поиска отображается корректно с помощью CSS.
### Примерный код
Вот пример, как это можно сделать с вашим текущим кодом:
```javascript
import React from 'react';
import classes from "./Jsph.module.css";
import useSWR from "swr";
import toast from "react-hot-toast";
import { useState } from "react";
import { ObjTable } from "../ObjTable";
import SearchForm from '../SearchForm'; // Импортируйте ваш компонент поиска
const ADD = 'add';
const API_URL = "http://localhost:3333/items";
const fetcher = async () => {
const res = await fetch(API_URL);
if (!res.ok) throw new Error("fetcher" + res.status);
return await res.json();
};
export function JSPHTable() {
const { data, error, isLoading } = useSWR(API_URL, fetcher);
const [addItem, setAddItem] = useState();
return (
<div>
<header>
<h1>Название вашего сайта</h1>
<SearchForm /> {/* Вставьте компонент формы поиска */}
</header>
{isLoading && <div>Loading...</div>}
{error && <div>Ошибка загрузки данных.</div>}
{data && <ObjTable items={data} />}
</div>
);
}
```
### Пример компонента `SearchForm`
Вот пример того, как может выглядеть ваш компонент поиска:
```javascript
import React, { useState } from 'react';
const SearchForm = () => {
const [query, setQuery] = useState('');
const handleSearch = (event) => {
event.preventDefault();
// Логика обработки поиска
console.log("Поиск:", query);
};
return (
<form onSubmit={handleSearch}>
<input
type="text"
placeholder="Поиск..."
value={query}
onChange={(e) => setQuery(e.target.value)}
/>
<button type="submit">Поиск</button>
</form>
);
};
export default SearchForm;
```
### Стилизация
Не забудьте добавить стили в ваш CSS-файл, чтобы форма поиска выглядела эстетично и находилась в нужном месте.
```css
header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
background-color: #f8f8f8;
}
header form {
display: flex;
}
header input {
margin-right: 5px;
}
```
### Запуск и тестирование
После внесения изменений, сохраните файлы и запустите ваше приложение. Убедитесь, что поле ввода поиска отображается в заголовке вашего сайта и работает корректно при отправке.
components/Link/index.jsx
import { SearchForm } from "../ObjTable/index";
компонентаSearchFormа точнее импорт не фигурирует в компонентеPagesWebsiteможет быть тебе надо вставить в шапку
компоненту которая ретернет форму.