Перейти від “заглушок” у пам’яті (файли масивів) до справжньої хмарної SQL-бази даних (PostgreSQL), використовуючи сервіс Supabase. Навчитися налаштовувати таблиці, створювати політики безпеки (RLS) та виконувати SELECT / INSERT запити з React додатку за допомогою SDK-бібліотеки.
products та наповнення її тестовими товарами.TechShop (Vite + React).fetch() з попередніх робіт на методи API Supabase: supabase.from('products').select('*').Увага: Продовжуємо вдосконалювати “TechShop”. Сьогодні наш додаток стане професійним. Уся інформація про товари, яку ми раніше тримали у своєму Node-сервері або масивах, тепер буде зберігатися у сучасній реляційній Базі Даних від Supabase (аналог Firebase, але на PostgreSQL).
techshop-db. Відзначте пароль від бази (запам’ятайте його).Table Editor -> Create a new table.products (маленькими буквами).Enable Row Level Security (для простоти навчання). Натисніть Save.title (тип text), price (тип numeric), image (тип text), category (тип text).Insert Row і заповніть 3-4 тестових товари:
techshop) виконайте:
npm install @supabase/supabase-js
src/supabaseClient.js.Візьміть власні ключі (URL та Anon Key) в Dashboard -> Settings (Шестірня внизу) -> API:
// src/supabaseClient.js
import { createClient } from "@supabase/supabase-js";
const supabaseUrl = "https://tviy-url-тут.supabase.co"; // Вставте своє!
const supabaseKey = "eyJhbGciOiJIUzI1...твій-аnon-ключ-тут..."; // Вставте своє!
export const supabase = createClient(supabaseUrl, supabaseKey);
fetch на Supabase.select:
src/pages/Home.jsx).fetch запити до нашого сервера на Node!Імпортуйте вашого клієнта бази даних і перепишіть хук useEffect:
import { supabase } from '../supabaseClient'; // 1. Імпортуємо
// ...інші імпорти
export function Home() {
const [products, setProducts] = useState([]);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchProductsFromDB = async () => {
try {
// Магія Supabase SDK (SQL-подібний запит: SELECT * FROM products)
const { data, error } = await supabase
.from('products')
.select('*');
// Якщо є помилка при підключенні до БД
if (error) throw error;
// Інакше оновлюємо стан нашими товарами з Хмарної БД!
setProducts(data);
} catch (err) {
setError(err.message);
} finally {
setIsLoading(false);
}
};
fetchProductsFromDB();
}, []);
return (
// ...ваш старий JSX з ПР №17
);
}
Table Editor (у браузері), оновіть React-додаток і ви побачите миттєву зміну ціни (база даних підключена успішно).git add . та git commit -m "Integrate Supabase Database for products table".main.Жодних статичних файлів або серверних заглушок. Інтернет-магазин працює з реальною “живою” реляційною БД (PostgreSQL) в хмарі. Дані можна візуально редагувати через зручну панель Supabase. Користувачі по всьому світу бачитимуть актуальний стан каталогу товарів.
SELECT * FROM products на JavaScript Promise? Що ми використали для цього (яку функцію/пакет)?Anon Key (Anon public) ключа з налаштувань API. Чи безпечно цей ключ залишати в публічному коді фронтенду (наприклад на GitHub)?.from, .insert()), за допомогою якого можна було б зберегти нове замовлення користувача (кошик) з форми CheckoutPage до таблиці orders.