Riot.js-এ External API থেকে ডেটা ফেচ করা খুবই সহজ, কারণ Riot.js সাধারণ JavaScript ফিচারগুলোকে সম্পূর্ণ সমর্থন করে, যেমন fetch API বা পুরানো XMLHttpRequest। API থেকে ডেটা ফেচ করার জন্য, আপনি fetch API ব্যবহার করতে পারেন, যা Promise ভিত্তিক এবং অধিক সুবিধাজনক।
১. External API থেকে ডেটা ফেচ করার উদাহরণ
ধরা যাক, আমরা একটি পাবলিক API থেকে ডেটা ফেচ করবো। উদাহরণস্বরূপ, আমরা একটি ফেক JSON প্লেসহোল্ডার API থেকে ডেটা ফেচ করবো, যেমন https://jsonplaceholder.typicode.com/posts।
উদাহরণ: External API থেকে ডেটা ফেচ করা এবং UI তে দেখানো
<!-- DataFetchExample.riot -->
<data-fetch-example>
<h1>Posts</h1>
<!-- API থেকে পাওয়া ডেটা দেখানো হচ্ছে -->
<ul>
<li each={post in posts}>{post.title}</li>
</ul>
<script>
export default {
posts: [], // ডেটা রাখার জন্য স্টেট
onMounted() {
// কম্পোনেন্ট মাউন্ট হওয়ার পর API ফেচিং শুরু হবে
this.fetchData();
},
// API থেকে ডেটা ফেচ করা
async fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await response.json();
this.posts = data; // API থেকে প্রাপ্ত ডেটা স্টেটে রাখা
} catch (error) {
console.error('Error fetching data:', error);
}
}
}
</script>
</data-fetch-example>
ব্যাখ্যা:
- State:
postsনামে একটি স্টেট তৈরি করা হয়েছে যা API থেকে আসা ডেটা ধারণ করবে। - onMounted:
onMounted()লাইফসাইকেল মেথডেfetchDataফাংশন কল করা হয়েছে, যা কম্পোনেন্ট মাউন্ট হওয়ার পর API ফেচিং শুরু করবে। - API ফেচিং:
fetchAPI ব্যবহার করে ডেটা ফেচ করা হয়েছে।response.json()দিয়ে ডেটাকে JSON আকারে পার্স করা হয়েছে এবং সেটিকেpostsস্টেটে সংরক্ষণ করা হয়েছে। - UI আপডেট:
postsস্টেটের পরিবর্তন হলে Riot.js স্বয়ংক্রিয়ভাবে UI আপডেট করে, এখানেeachডিরেকটিভ ব্যবহার করে একটি লিস্টে পোস্টগুলোর শিরোনাম দেখানো হচ্ছে।
২. Loading State এবং Error Handling
ডেটা ফেচ করার সময় আপনি সাধারণত লোডিং স্টেট এবং ত্রুটি হ্যান্ডলিংও যোগ করতে চাইবেন। নিচে একটি উন্নত উদাহরণ দেয়া হল যেখানে লোডিং এবং ত্রুটি হ্যান্ডলিং যোগ করা হয়েছে।
<!-- DataFetchWithLoadingAndError.riot -->
<data-fetch-with-loading-and-error>
<h1>Posts</h1>
<!-- লোডিং স্টেট -->
<div if={isLoading}>Loading...</div>
<!-- ত্রুটি স্টেট -->
<div if={hasError}>Error fetching data!</div>
<!-- API থেকে পাওয়া ডেটা দেখানো হচ্ছে -->
<ul>
<li each={post in posts}>{post.title}</li>
</ul>
<script>
export default {
posts: [], // API থেকে আসা ডেটা রাখার জন্য স্টেট
isLoading: true, // লোডিং স্টেট
hasError: false, // ত্রুটি স্টেট
onMounted() {
// কম্পোনেন্ট মাউন্ট হওয়ার পর API ফেচিং শুরু হবে
this.fetchData();
},
async fetchData() {
this.isLoading = true; // ডেটা ফেচ করার সময় লোডিং চালু
this.hasError = false; // ত্রুটি মুছে দেয়া
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await response.json();
this.posts = data; // ডেটা স্টেটে রাখা
} catch (error) {
this.hasError = true; // ত্রুটি ঘটলে ত্রুটি স্টেট চালু
console.error('Error fetching data:', error);
} finally {
this.isLoading = false; // লোডিং শেষ
}
}
}
</script>
</data-fetch-with-loading-and-error>
ব্যাখ্যা:
- লোডিং স্টেট:
isLoadingনামক একটি স্টেট যোগ করা হয়েছে, যা API থেকে ডেটা ফেচ করার সময়trueথাকবে এবং ডেটা ফেচ শেষ হলেfalseহয়ে যাবে। UI তে লোডিং মেসেজ দেখানোর জন্যif={isLoading}ব্যবহার করা হয়েছে। - ত্রুটি হ্যান্ডলিং:
hasErrorনামে একটি স্টেট যোগ করা হয়েছে। যদি API ফেচের সময় কোনো সমস্যা হয়, তবেhasError = trueহবে এবং ত্রুটি মেসেজ UI তে প্রদর্শিত হবে। - finally:
finallyব্লক ব্যবহার করা হয়েছে যাতে ফেচিং শেষ হওয়ার পর লোডিং স্টেট অবশ্যইfalseহয়, তা সফল হোক বা ত্রুটিপূর্ণ হোক।
৩. Paginated Data ফেচিং
অনেক API তে পেইজিনেটেড ডেটা থাকে। নিচে একটি উদাহরণ দেয়া হল যেখানে API থেকে পেইজিনেটেড ডেটা ফেচ করা হচ্ছে।
<!-- PaginatedDataFetch.riot -->
<paginated-data-fetch>
<h1>Paginated Posts</h1>
<div if={isLoading}>Loading...</div>
<div if={hasError}>Error fetching data!</div>
<ul>
<li each={post in posts}>{post.title}</li>
</ul>
<button onclick={loadMore} if={hasNextPage}>Load More</button>
<script>
export default {
posts: [],
currentPage: 1,
isLoading: false,
hasError: false,
hasNextPage: true,
onMounted() {
this.fetchData();
},
async fetchData() {
this.isLoading = true;
this.hasError = false;
try {
const response = await fetch(`https://jsonplaceholder.typicode.com/posts?_page=${this.currentPage}&_limit=10`);
const data = await response.json();
this.posts = this.posts.concat(data);
this.hasNextPage = data.length > 0;
} catch (error) {
this.hasError = true;
console.error('Error fetching data:', error);
} finally {
this.isLoading = false;
}
},
loadMore() {
this.currentPage += 1;
this.fetchData();
}
}
</script>
</paginated-data-fetch>
ব্যাখ্যা:
- Paginated Data: API URL এ
_pageএবং_limitপ্যারামিটার ব্যবহার করে পেইজিনেটেড ডেটা ফেচ করা হচ্ছে। - Load More:
loadMore()ফাংশন ব্যবহার করে নতুন পেইজের ডেটা লোড করা হচ্ছে।hasNextPageস্টেটের মাধ্যমে চেক করা হচ্ছে যে আরও পেইজ আছে কিনা।
Riot.js-এ External API থেকে ডেটা ফেচ করার জন্য fetch API ব্যবহার করা খুবই সহজ। আপনি ডেটা ফেচিং, লোডিং স্টেট, ত্রুটি হ্যান্ডলিং এবং পেইজিনেটেড ডেটা ফেচিং সহ বিভিন্ন ধরনের API ইন্টারঅ্যাকশন সহজেই তৈরি করতে পারেন। Riot.js এর রিয়েকটিভ ডাটা বাইন্ডিং এর মাধ্যমে API থেকে আসা ডেটা UI তে স্বয়ংক্রিয়ভাবে আপডেট হয়, যা আপনার ডেভেলপমেন্ট প্রক্রিয়াকে আরও দ্রুত এবং কার্যকরী করে তোলে।
Read more