React Router'до маалыматтарды оңдоо үчүн маршрут түзүү
Өткөн сабакта биз бөлүнүп турган React
компоненти EditProduct үчүн
оңдоо формасын түзгөнбүз.
Келгиле, азыр импорттон кийин жана
EditProduct функциясынан мурун
жаңы маршрут үчүн жүктөөчү функцияны жазалы.
Ал product.jsx-тегидей эле болот. Функцияга
URL параметрлери өткөрүлүп берилет жана
андан кийин биз продуктту анын
id боюнча алабыз:
export async function loader({ params }) {
const product = await getProduct(params.productId);
return { product };
}
getProduct-ты
forStorage.js файлынан импорттойлу:
import { getProduct } from '../forStorage';
Эми биз main.jsx файлыбызды ачып,
түзгөн компонентибиз EditProduct жана
жүктөөчүнү импорттойбуз:
import EditProduct, { loader as editProductLoader } from './routes/edit';
Андан кийин продукт үчүн маршруттан кийин
оңдоо үчүн маршрут объектисин children
массивине кошобуз:
children: [
{
path: 'products/:productId',
element: <Product />,
loader: productLoader,
},
{
path: 'products/:productId/edit',
element: <EditProduct />,
loader: editProductLoader,
},
],
Эми колдонмону иштетели, продукт түзөлү, ага чыкылдап, андан кийин оңдоо баскычына чыкылдап, формабызды көрөлү.
Бир ганы, оңдоодон мурун форманын талааларында
учурдагы маалыматтар жүктөлгөн болушу үчүн
дагы бир нерсе кылышыбыз керек. Бул үчүн биз
edit.jsx файлына useLoaderData
хукун импорттойбуз:
import { Form, useLoaderData } from 'react-router-dom';
Жана аны EditProduct функциясында
жүктөөчүдөн маалымат алуу үчүн колдонобуз.
Аны return командасынан мурун кошобуз:
const { product } = useLoaderData();
Эми ар бир инпут тегине тиешелүү маанилер менен
defaultValue атрибутун кошобуз. Мисалы,
биринчи инпут азыр төмөнкүдөй көрүнөт:
<input
placeholder="name"
type="text"
name="name"
defaultValue={product.name}
/>
Калган эки инпут үчүн маанилер тиешелүүлүгүнө
жараша 'product.cost' жана
'product.amount' болот. Бирок, азырынча
формабызда маалыматтар жок.
Өткөн сабактардын тапшырмаларында түзгөн
колдонмонузду алыңыз. Сабактын материалын
колдонуп, студенттин маалыматтарын оңдоо
үчүн edit.jsx файлында маршрут үчүн
loader функциясын түзүңүз.
children массивине оңдоо үчүн
маршрут объектисин кошуңуз.
Сиздин EditStudent функцияңыз үчүн
сабакта талап кылынган кодду кошуңуз.