React Router-এ ডেটা সম্পাদনার জন্য রুট তৈরি করা
গত পাঠে আমরা একটি পৃথক React
কম্পোনেন্ট EditProduct-এ
সম্পাদনার জন্য একটি ফর্ম তৈরি করেছি।
এখনই আমদানির পরেই একটি নতুন রুটের জন্য লোডার ফাংশন লিখি
এবং EditProduct ফাংশনের আগে। এটি
product.jsx-এর মতোই হবে।
ফাংশনে URL প্যারামিটার পাস করা হবে
এবং তারপর আমরা এর দ্বারা পণ্য পাব
id:
export async function loader({ params }) {
const product = await getProduct(params.productId);
return { product };
}
forStorage.js থেকে getProduct
আমদানি করি:
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 ফাংশনের জন্য পাঠে প্রয়োজনীয়
কোড যোগ করুন।