21
রিয়েক্ট রাউটার ডম v6 - Changes & Updates
সম্প্রতি React Router Dom তাদের ভার্সন আপডেট করে ভার্সন ৬ রিলিজ করেছে। এই ভার্সনে বেশ কিছু ব্রেকিং চেঞ্জ এবং আপডেট এসেছে যেগুলো পূর্ববর্তী ভার্সন গুলো থেকে বেশ ভিন্ন এবং নতুন। আজকের এই ব্লগে React Router Dom ভার্সন ৬ এর সকল ব্রেকিং চেঞ্জ এবং নিউ ফিচার গুলো সম্পর্কে উদাহরন সহ বিস্তারিত আলোচনা করা হবে।
Npm: npm install react-router@next react-router-dom@next
Yarn: yarn add react-router@next react-router-dom@next
React Router Dom ভার্সন ৬ এ <Switch>
রিমুভ করে এর পরিবর্তে <Routes>
আনা হয়েছে। এটিতে <Switch>
এর প্রায় সব বৈশিষ্ট্য থাকার পাশাপাশি বেশ কিছু এক্সটা ফিচার রয়েছে।
উদাহরনঃ
React Router v5
import { BrowserRouter, Switch, Route } from 'react-router-dom';
const App = () => {
return (
<BrowserRouter>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/dashboard" component={Dashboard} />
</Switch>
</BrowserRouter>
);
}
React Router v6
import { BrowserRouter, Routes, Route } from 'react-router-dom';
const App = () => {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="dashboard" element={<Dashboard/>} />
</Routes>
</BrowserRouter>
);
}
ভার্সন ৬ এ ভার্সন ৫ এর মতন আর component কে প্রপ্স বা চিল্ড্রেন আঁকারে পাঠানো লাগেনা। element প্রপ এর ভেতর jsx ফরমেটে component কে পাঠাতে হয়।
আপনি যদি উপরের উদাহরণে লক্ষ্য করেন, ভার্সন ৬ এ আমরা component এর পরিবর্তে element ব্যবহার করছি। এটি অনেক হেল্পফুল একটা ফিচার, এখন আমরা সরাসরি element e প্রপস পাঠাতে পারি।
উদাহরনঃ
React Router v5
<Route exact path="/" component={Home} />
<Route path="/dashboard" render={routeProps => (
<Dashboard isAdmin={true} />
)}
/>
React Router v6
<Route path="/" element={<Home />} />
<Route path="dashboard" element={<Dashboard isAdmin={true} />} />
ভার্সন ৬ এ সবগুলো রাউট exactly ম্যাচ করে বাই ডিফল্ট তাই extact এবং strict প্রপের প্রয়োজন নেই।
উদাহরনঃ
React Router v5
<Route exact path="/" component={Home} />
React Router v6
<Route path="/" element={<Home />} />
ভার্সন ৬ এ, paths এবং link দূটোই তাদের পেরেন্টে রাউটের সাথে রিলেটিভ। তাই এখন আমাদের রিলেটিভ পাথের প্রয়োজন হলে আমরা “/” ব্যবহার করা ছাড়াই সেটা করতে পারি।
উদাহরনঃ
React Router v5
<Route exact path="/" component={Home} />
<Route path="/dashboard" component={Dashboard} />
React Router v6
<Route path="/" element={<Home />} />
<Route path="dashboard" element={<Dashboard />} />
রেগুলার রিয়েক্ট এলিমেন্টের মতন এখন শুধু চাইল্ড রাউট গুলোকে পেরেন্ট রাউট দিয়ে র্যাপ করে দিলেই হয়ে যাবে নেস্টেড রাউট।
উদাহরনঃ
React Router v5
<Route exact path="/" component={Home} />
<Route path="/users" component={Users} />
// ....
users.js
import { useRouteMatch } from 'react-router-dom';
const Users = () => {
const { path } = useRouteMatch();
return (
<div>
<Switch>
<Route path={`${path}/:id`} component={UserInfo} />
<Route path={`${path}/profile`} component={UserProfile} />
</Switch>
</div>
);
}
React Router v6
<Route path="/" element={<Home />} />
<Route path="users" element={<Users />}>
<Route path=":id" element={<UserInfo />} />
<Route path="profile" element={<UserProfile />} />
</Route>
// ....
users.js
import { Outlet } from 'react-router-dom';
const Users = () => {
return (
<div>
<Outlet/>
</div>
);
}
useHistory কে গায়েবুল হাওয়া করে দিয়ে এর পরিবর্তে চলে এসেছে আরো বেশি পাওয়ারফুল এবং ফিচার প্যাকড useNavigate হুক।
উদাহরনঃ
React Router v5
import { useHistory } from 'react-router-dom';
const CustomButton = props => {
const history = useHistory();
const handleClick = () => {
history.push('/users');
}
return <button onClick={handleClick}>{props.label}</button>;
}
React Router v6
import { useNavigate } from 'react-router-dom';
const CustomButton = props => {
const navigate = useNavigate();
const handleClick = () => {
navigate('/users');
}
return <button onClick={handleClick}>{props.label}</button>;
}
ভার্সন ৫ এর চেয়ে ভার্সন ৬ অনেক বেশি পাওয়ারফুল এবং ফিচার সমৃদ্ব হওয়ার পরেও এর সাইজ ভার্সন ৫ এর প্রায় অর্ধেকেরও কম।
ভার্সন ৫ঃ ২৮.৪ kb
ভার্সন ৬ঃ ১০.২ kb
21