এই আলোচনাটি কিছুক্ষণ হয়ে গেছে এবং @ আলেকজান্দার টি এর উত্তরটি আমার মতো নতুন প্রতিক্রিয়া জানাতে একটি ভাল গাইড সরবরাহ করেছে provided এবং আমি উপাদানটি রিফ্রেশ করার জন্য একই API কে একাধিকবার কল করার বিষয়ে কিছু অতিরিক্ত জ্ঞান ভাগ করে নেব, আমি মনে করি এটি সম্ভবত একটি সাধারণ সমস্যা যা নবাগত প্রথমদিকে মুখোমুখি হতে পারে।
componentWillReceiveProps(nextProps)
, অফিসিয়াল ডকুমেন্টেশন থেকে :
প্রপ পরিবর্তনের প্রতিক্রিয়ায় আপনাকে রাষ্ট্র আপডেট করতে হবে (উদাহরণস্বরূপ, এটি পুনরায় সেট করতে), আপনি এটি.পড়গুলি এবং নেক্সটপ্রপসের সাথে তুলনা করতে পারেন এবং এই পদ্ধতিতে এই.সেটস্টেট () ব্যবহার করে রাষ্ট্রের ট্রানজিশনগুলি সম্পাদন করতে পারেন।
আমরা উপসংহারে পৌঁছে যেতে পারি যে এখানে প্যারেন্ট উপাদান থেকে প্রপসগুলি পরিচালনা করি এমন জায়গা, এপিআই কল এবং আপডেটের স্থিতি।
@ আলেকজান্ডার টি এর উদাহরণের ভিত্তিতে:
export default class UserList extends React.Component {
constructor(props) {
super(props);
this.state = {person: []};
}
componentDidMount() {
//For our first load.
this.UserList(this.props.group); //maybe something like "groupOne"
}
componentWillReceiveProps(nextProps) {
// Assuming parameter comes from url.
// let group = window.location.toString().split("/")[*indexParameterLocated*];
// this.UserList(group);
// Assuming parameter comes from props that from parent component.
let group = nextProps.group; // Maybe something like "groupTwo"
this.UserList(group);
}
UserList(group) {
$.getJSON('https://randomuser.me/api/' + group)
.then(({ results }) => this.setState({ person: results }));
}
render() {
return (...)
}
}
হালনাগাদ
componentWillReceiveProps()
হ্রাস করা হবে।
জীবনচক্রের এখানে কেবলমাত্র কয়েকটি পদ্ধতি ( ডক-এ সমস্ত ) রয়েছে যা আমি মনে করি যে সাধারণ ক্ষেত্রে এপিআই মোতায়েনের সাথে সম্পর্কিত হবে:
উপরের চিত্রটি উল্লেখ করে:
এপিআই স্থাপন করুন componentDidMount()
এখানে এপিআই কল দেওয়ার উপযুক্ত দৃশ্যটি হ'ল এই উপাদানটির সামগ্রী (এপিআইয়ের প্রতিক্রিয়া থেকে) অচল থাকবে, componentDidMount()
কেবল উপাদানটি মাউন্ট করার সময় কেবলমাত্র আগুন হবে , এমনকি নতুন প্রপসগুলি প্যারেন্ট উপাদান থেকে পাস হয়ে গেছে বা নেতৃত্বের জন্য পদক্ষেপ রয়েছে re-rendering
।
উপাদানটি পুনরায় রেন্ডার করতে পার্থক্যটি পরীক্ষা করে তবে পুনরায় মাউন্ট করে না । ডক
থেকে উদ্ধৃতি :
আপনার যদি কোনও দূরবর্তী শেষ পয়েন্ট থেকে ডেটা লোড করার প্রয়োজন হয় তবে নেটওয়ার্ক অনুরোধটি ইনস্ট্যান্ট করার জন্য এটি ভাল জায়গা।
- এপিআই স্থাপন করুন
static getDerivedStateFromProps(nextProps, prevState)
আমাদের লক্ষ্য করা উচিত যে দুটি ধরণের উপাদান আপডেট করা আছে , setState()
বর্তমান উপাদানগুলিতে এই পদ্ধতিটি ট্রিগার করতে পরিচালিত করবে না , তবে পুনরায় রেন্ডারিং বা প্যারেন্ট উপাদানগুলির নতুন প্রপসগুলি করবে । আমরা আবিষ্কার করতে পারি যে মাউন্ট করার সময় এই পদ্ধতিটিও ফায়ার করে।
যদি আমরা বর্তমান উপাদানটি কোনও টেম্পলেটের মতো ব্যবহার করতে চাই তবে এটি এপিআই মোতায়েন করার উপযুক্ত জায়গা এবং এপিআইয়ের নতুন প্যারামিটারগুলি প্যারেন্ট উপাদান থেকে আগত প্রপস ।
আমরা এপিআই থেকে আলাদা প্রতিক্রিয়া পেয়েছি এবং state
এই উপাদানটির বিষয়বস্তু পরিবর্তন করতে এখানে একটি নতুন ফেরত দেব।
উদাহরণস্বরূপ:
প্যারেন্ট উপাদানগুলিতে বিভিন্ন গাড়ির জন্য আমাদের একটি ড্রপডাউন তালিকা রয়েছে, এই উপাদানটি নির্বাচিতটির বিশদ প্রদর্শন করা দরকার।
- এপিআই স্থাপন করুন
componentDidUpdate(prevProps, prevState)
এর থেকে পৃথক static getDerivedStateFromProps()
, এই পদ্ধতিটি প্রাথমিক রেন্ডারিং বাদে প্রতিটি রেন্ডারিংয়ের সাথে সাথেই শুরু করা হয়। আমরা এপিআই কলিং এবং একটি উপাদান মধ্যে রেন্ডার পার্থক্য থাকতে পারে।
পূর্ববর্তী উদাহরণটি প্রসারিত করুন:
গাড়ির বিবরণগুলি দেখানোর উপাদানটিতে এই গাড়ির সিরিজের একটি তালিকা থাকতে পারে, আমরা যদি 2013 সালের উত্পাদনটি পরীক্ষা করতে চাই, আমরা ক্লিক করতে পারি বা নির্বাচন করতে পারি বা ... তালিকা আইটেমটি setState()
এটি প্রতিফলিত করার জন্য প্রথমে নেতৃত্ব দেয় এই উপাদানটিতে আচরণ (যেমন তালিকার আইটেমটি হাইলাইট করার মতো), এবং নিম্নলিখিতটিতে componentDidUpdate()
আমরা নতুন প্যারামিটারগুলি (রাষ্ট্র) সহ আমাদের অনুরোধটি প্রেরণ করি। প্রতিক্রিয়া পাওয়ার পরে, আমরা setState()
আবার গাড়ির বিবরণের বিভিন্ন বিষয়বস্তু রেন্ডার করার জন্য। নিম্নলিখিতগুলিকে componentDidUpdate()
অনন্ত লুপটি সৃষ্টি হতে রোধ করতে , আমরা prevState
এপিআই প্রেরণ করব এবং নতুন সামগ্রীটি রেন্ডার করব কিনা তা সিদ্ধান্ত নেওয়ার জন্য এই পদ্ধতির শুরুতে ব্যবহার করে রাষ্ট্রের তুলনা করা দরকার ।
এই পদ্ধতিটি প্রকৃতপক্ষে ঠিক যেমন ব্যবহার করা যেতে পারে static getDerivedStateFromProps()
তবে props
ব্যবহারের মাধ্যমে পরিবর্তনগুলি পরিচালনা করা দরকার prevProps
। এবং componentDidMount()
প্রাথমিক এপিআই কলটি পরিচালনা করতে আমাদের সহযোগিতা করতে হবে।
ডক থেকে উদ্ধৃতি :
... যতক্ষণ না আপনি বর্তমান প্রপসকে আগের প্রপসের সাথে তুলনা করেন ততক্ষণ নেটওয়ার্ক অনুরোধগুলি করার পক্ষে এটি একটি ভাল জায়গা ...
componentDidMount
।