দাবি পরিত্যাগী
প্রতিক্রিয়াযুক্ত নেস্টেড স্টেট ভুল নকশা
এই দুর্দান্ত উত্তর পড়ুন ।
এই উত্তরের পিছনে যুক্তি:
প্রতিক্রিয়াটির সেটস্টেটটি কেবল একটি বিল্ট-ইন সুবিধা, তবে আপনি শীঘ্রই বুঝতে পারবেন যে এটির সীমাবদ্ধতা রয়েছে। কাস্টম বৈশিষ্ট্য এবং ফোর্সআপ্টেটের বুদ্ধিমান ব্যবহার ব্যবহার আপনাকে আরও অনেক কিছু দেয়। উদাহরণ:
class MyClass extends React.Component {
myState = someObject
inputValue = 42
...
মোবএক্স, উদাহরণস্বরূপ, খাঁজ পুরোপুরি করে এবং কাস্টম পর্যবেক্ষণযোগ্য বৈশিষ্ট্য ব্যবহার করে।
প্রতিক্রিয়া উপাদানগুলিতে রাজ্যের পরিবর্তে পর্যবেক্ষণগুলি ব্যবহার করুন।
নেস্টেড সম্পত্তি যা আছে তা আপডেট করার জন্য আরও একটি ছোট উপায় আছে।
this.setState(state => {
state.nested.flag = false
state.another.deep.prop = true
return state
})
এক লাইনে
this.setState(state => (state.nested.flag = false, state))
দ্রষ্টব্য: এটি এখানে কমা অপারেটর ~ এমডিএন , এটি এখানে কর্মে এটি দেখুন (স্যান্ডবক্স) ।
এটি অনুরূপ (যদিও এটি রাষ্ট্রের রেফারেন্স পরিবর্তন করে না)
this.state.nested.flag = false
this.forceUpdate()
এই প্রসঙ্গে সূক্ষ্ম পার্থক্যের জন্য forceUpdateএবং setStateসংযুক্ত উদাহরণটি দেখুন।
অবশ্যই এটি কয়েকটি মূল নীতিগুলি অপব্যবহার করছে, যেমনটি stateকেবল পঠনযোগ্য হওয়া উচিত তবে আপনি যেহেতু পুরানো রাষ্ট্রটি তাত্ক্ষণিকভাবে ত্যাগ করছেন এবং এটি নতুন রাষ্ট্রের সাথে প্রতিস্থাপন করছেন, এটি সম্পূর্ণ ঠিক।
সতর্কতা
যদিও রাষ্ট্রযুক্ত উপাদানগুলি সঠিকভাবে আপডেট হবে এবং পুনরায় রেন্ডার করবে ( এই গোটচা ব্যতীত ) , প্রপসগুলি শিশুদের কাছে প্রচার করতে ব্যর্থ হবে (স্পাইমাস্টারের মন্তব্য নীচে দেখুন) । আপনি কী করছেন তা যদি আপনি জানেন তবেই এই কৌশলটি ব্যবহার করুন।
উদাহরণস্বরূপ, আপনি একটি পরিবর্তিত ফ্ল্যাট প্রপ পাস করতে পারেন যা আপডেট এবং সহজেই পাস হয়।
render(
//some complex render with your nested state
<ChildComponent complexNestedProp={this.state.nested} pleaseRerender={Math.random()}/>
)
কমপ্লেক্সনেস্টড্রপের জন্য রেফারেন্স পরিবর্তিত না হওয়া সত্ত্বেও ( shouldComp घटकUpdate )
this.props.complexNestedProp === nextProps.complexNestedProp
যখনই পিতা বা মাতা উপাদান আপডেট হয় তখন উপাদানটি পুনরায় রেন্ডার হবে , যা কল করার পরে this.setStateবা this.forceUpdateপিতামাতার ক্ষেত্রে।
রাষ্ট্রকে পরিবর্তিত করার প্রভাব
নেস্টেড স্টেট ব্যবহার করা এবং রাজ্যকে সরাসরি রূপান্তর করা বিপজ্জনক কারণ বিভিন্ন বিষয়গুলি (ইচ্ছাকৃতভাবে বা না) রাষ্ট্রের বিভিন্ন (পুরানো) রেফারেন্স ধারণ করতে পারে এবং কখন আপডেট করতে হবে তা অবশ্যই জানে না (উদাহরণস্বরূপ যখন ব্যবহার করার সময় PureComponentবা shouldComponentUpdateফিরে আসার জন্য প্রয়োগ করা হয় false) বা হয় নীচের উদাহরণে মত পুরানো ডেটা প্রদর্শন করার উদ্দেশ্যে।
এমন একটি টাইমলাইন কল্পনা করুন যা historicতিহাসিক ডেটা রেন্ডার করার কথা রয়েছে, হাতের নীচে ডেটা পরিবর্তনের ফলে অপ্রত্যাশিত আচরণ হবে কারণ এটি পূর্ববর্তী আইটেমগুলিকেও পরিবর্তন করবে।

যাইহোক এখানে আপনি দেখতে পাচ্ছেন যে Nested PureChildClassপ্রচারগুলিতে ব্যর্থ হয়ে প্রপসের কারণে এটি রেন্ডার হয়নি।