কীভাবে রিএ্যাক্ট.জেজে রাষ্ট্রের পরিবর্তন শুনতে হয়?


143

React.js এ কৌণিকের $ ঘড়ির কার্য সমান কী?

আমি রাষ্ট্রের পরিবর্তনগুলি শুনতে এবং getSearchResults () এর মতো কোনও ফাংশনটিতে কল করতে চাই।

componentDidMount: function() {
    this.getSearchResults();
}

উত্তর:


37

আমি কৌণিক ব্যবহার করি নি, তবে উপরের লিঙ্কটি পড়ে মনে হচ্ছে আপনি এমন কোনও কিছুর জন্য কোড করার চেষ্টা করছেন যা আপনার হ্যান্ডেল করার দরকার নেই। আপনি আপনার প্রতিক্রিয়া উপাদান ক্রমবিন্যাস (this.setState () এর মাধ্যমে) এ রাষ্ট্র পরিবর্তন করতে চান এবং প্রতিক্রিয়া আপনার উপাদানটিকে পুনরায় রেন্ডার করতে পারে (পরিবর্তনের জন্য কার্যকরভাবে 'শ্রবণ')। আপনি যদি আপনার শ্রেণিবিন্যাসের অন্য কোনও উপাদান থেকে 'শুনতে' চান তবে আপনার কাছে দুটি বিকল্প রয়েছে:

  1. কোনও সাধারণ পিতা-মাতার কাছ থেকে হ্যান্ডলারগুলি (প্রপসের মাধ্যমে) পাস করুন এবং তাদের পিতামাতার অবস্থা আপডেট করুন, যার ফলে পিতামাতার নীচে স্তরক্রমটি পুনরায় রেন্ডার হতে পারে।
  2. বিকল্পভাবে, হ্যান্ডার্কিগুলি ক্রমবর্ধমান সংঘটিত হ্যান্ডলারের বিস্ফোরণ এড়াতে আপনার ফ্লাক্স প্যাটার্নটি দেখতে হবে , যা আপনার স্টোরকে ডেটা স্টোরগুলিতে সরিয়ে দেয় এবং উপাদানগুলি পরিবর্তনের জন্য তাদের দেখার অনুমতি দেয়। Fluxxor প্লাগইন এই পরিচালনার জন্য খুবই দরকারী।

3
তবে যখন আপনাকে কোনও ইউআরএল / প্যারামিটার হিসাবে রাজ্যটি (অংশ) ব্যবহার করে এমন দূরবর্তী ডেটা আনার দরকার কী হবে?
আরএনএমএস


320

রাষ্ট্র পরিবর্তন হলে নিম্নলিখিত জীবনচক্র পদ্ধতিগুলি ডাকা হবে। অর্থপূর্ণ কিছু পরিবর্তন হয়েছে কিনা তা নির্ধারণ করতে আপনি সরবরাহিত যুক্তি এবং বর্তমান অবস্থা ব্যবহার করতে পারেন।

componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)

5
যখন অন্য উপাদানগুলির কোনও সম্পত্তি আপডেট করা হয়েছিল (কলব্যাকের মাধ্যমে একটি, প্রোপের মাধ্যমে একটি নীচে) আপডেট করা হয়েছিল, এবং componentDidUpdateপ্রপটির সাথে উপাদানটিতে যুক্ত করা ছিল সঠিক প্রেসক্রিপশন। এর জন্য ধন্যবাদ.
কীথ ডিসি

আমি মনে করি এটি রাষ্ট্রের পরিবর্তনের বিজ্ঞপ্তির গ্যারান্টি দেওয়ার সর্বোত্তম উপায়, যা ওপি বলেছিল। তবে মনে রাখবেন যে যদি স্টাড কম্পোনেন্ট আপটেডে আপডেটটি ভেটো করা হয় তবে এই পদ্ধতির কোনওটিই রাষ্ট্রীয় পরিবর্তনের পরে চালু হবে না।
মধ্যরাত্রি


1
componentDidUpdateনতুন প্রপসগুলি গ্রহণ করার সময়ও গুলি চালানো হবে না, কেবল যখন রাষ্ট্র পরিবর্তন হয়?
অ্যান্ডি ম্যাককালু

1
componentWillUpdateঅবচয় করা হয়।
শন

29

আমার মনে হয় আপনি কমপোনেন্ট লাইফসাইকের নীচে ব্যবহার করা উচিত যেমন আপনার যদি কোনও ইনপুট সম্পত্তি থাকে যা আপডেটে আপনার উপাদান আপডেটটি ট্রিগার করতে হয় তবে এটি করার জন্য এটি সেরা জায়গা কারণ এটি রেন্ডার করার আগে বলা হবে এমনকি আপনি আপডেট উপাদান উপাদানটিও করতে পারেন ভিউ প্রতিফলিত।

componentWillReceiveProps: function(nextProps) {
  this.setState({
    likesIncreasing: nextProps.likeCount > this.props.likeCount
  });
}


14

যেহেতু 2019 সালে ব্যবহারের স্টেট এবং ইউজএফেক্ট হুক সহ 16.8 প্রতিক্রিয়া দেখানো হয়েছে , নিম্নলিখিতটি এখন সমান (সাধারণ ক্ষেত্রে):

AngularJS:

$scope.name = 'misko'
$scope.$watch('name', getSearchResults)

<input ng-model="name" />

প্রতিক্রিয়া:

const [name, setName] = useState('misko')
useEffect(getSearchResults, [name])

<input value={name} onChange={e => setName(e.target.value)} />

2

উপরে বর্ণিত হিসাবে UseEffect সহ UseState ব্যবহার করা একেবারে সঠিক উপায়। তবে যদি getSearchResults ফাংশনটি সাবস্ক্রিপশন ফিরিয়ে দেয় তবে ইউজএফেক্টটি এমন কোনও ফাংশন ফিরিয়ে আনবে যা সাবস্ক্রিপশনটি বাতিল করার জন্য দায়ী হবে be UseEffect থেকে ফিরে ফাংশন নির্ভরতাতে প্রতিটি পরিবর্তনের আগে চলবে (উপরের ক্ষেত্রে নাম) এবং উপাদান বিনষ্টে


1

এটি কিছুক্ষণ হয়ে গেছে তবে ভবিষ্যতের রেফারেন্সের জন্য: পদ্ধতিটি উচিত কম্পোনেন্ট আপডেট () ব্যবহার করা যেতে পারে।

প্রপস বা স্টেটে পরিবর্তনের কারণে একটি আপডেট হতে পারে। এই উপাদানগুলিকে নিম্নলিখিত ক্রমে ডাকা হয় যখন কোনও উপাদান পুনরায় রেন্ডার করা হয়:

static getDerivedStateFromProps() 
shouldComponentUpdate() 
render()
getSnapshotBeforeUpdate() 
componentDidUpdate()

রেফ: https://reactjs.org/docs/react-component.html


আপনাকে এখান থেকে একটি বুলিয়ান ফিরিয়ে দিতে হবে shouldComponentUpdateযাতে এটি ব্যবহারের ক্ষেত্রে উপযুক্ত নাও হতে পারে।
শন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.