प्रतिक्रिया ट्यूटोरियल

रिएक्ट होम प्रतिक्रिया परिचय प्रतिक्रिया आरंभ करें प्रतिक्रिया ES6 रिएक्ट रेंडर एचटीएमएल प्रतिक्रिया JSX प्रतिक्रिया घटक प्रतिक्रिया वर्ग प्रतिक्रिया सहारा प्रतिक्रिया घटनाक्रम प्रतिक्रिया सशर्त प्रतिक्रिया सूचियाँ प्रतिक्रिया प्रपत्र प्रतिक्रिया राउटर प्रतिक्रिया ज्ञापन प्रतिक्रिया सीएसएस स्टाइलिंग प्रतिक्रिया सास स्टाइलिंग

प्रतिक्रिया हुक

एक हुक क्या है? राज्य का उपयोग करें उपयोग प्रभाव उपयोग प्रसंग उपयोग रेफरी रेड्यूसर का उपयोग करें कॉलबैक का उपयोग करें मेमो का उपयोग करें कस्टम हुक

प्रतिक्रिया अभ्यास

प्रतिक्रिया प्रश्नोत्तरी प्रतिक्रिया अभ्यास प्रतिक्रिया प्रमाण पत्र

प्रतिक्रिया useEffectहुक


useEffectहुक आपको अपने घटकों में साइड इफेक्ट करने की अनुमति देता है

साइड इफेक्ट के कुछ उदाहरण हैं: डेटा प्राप्त करना, सीधे DOM को अपडेट करना, और टाइमर।

useEffectदो तर्क स्वीकार करता है। दूसरा तर्क वैकल्पिक है।

useEffect(<function>, <dependency>)


आइए एक उदाहरण के रूप में टाइमर का उपयोग करें।

उदाहरण:

setTimeout()प्रारंभिक रेंडर के बाद 1 सेकंड गिनने के लिए उपयोग करें :

import { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function Timer() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    setTimeout(() => {
      setCount((count) => count + 1);
    }, 1000);
  });

  return <h1>I've rendered {count} times!</h1>;
}

ReactDOM.render(<Timer />, document.getElementById('root'));

लेकिन रुकें!! मैं गिनता रहता हूँ भले ही इसे केवल एक बार गिनना चाहिए!

useEffectहर रेंडर पर चलता है। इसका मतलब है कि जब गिनती बदलती है, तो एक रेंडर होता है, जो फिर दूसरे प्रभाव को ट्रिगर करता है।

हम यही नहीं चाहते। साइड इफेक्ट चलने पर इसे नियंत्रित करने के कई तरीके हैं।

हमें हमेशा दूसरा पैरामीटर शामिल करना चाहिए जो एक सरणी स्वीकार करता है। useEffectहम वैकल्पिक रूप से इस सरणी में निर्भरताएँ पास कर सकते हैं ।

1. कोई निर्भरता पारित नहीं हुई:

useEffect(() => {
  //Runs on every render
});

2. एक खाली सरणी:

useEffect(() => {
  //Runs only on the first render
}, []);

3. सहारा या राज्य मूल्य:

useEffect(() => {
  //Runs on the first render
  //And any time any dependency value changes
}, [prop, state]);

तो, इस समस्या को ठीक करने के लिए, आइए इस प्रभाव को केवल प्रारंभिक रेंडर पर चलाते हैं।

उदाहरण:

केवल प्रारंभिक रेंडर पर प्रभाव चलाएं:

import { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function Timer() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    setTimeout(() => {
      setCount((count) => count + 1);
    }, 1000);
  }, []); // <- add empty brackets here

  return <h1>I've rendered {count} times!</h1>;
}

ReactDOM.render(<Timer />, document.getElementById('root'));

उदाहरण:

यहां एक useEffectहुक का उदाहरण दिया गया है जो एक चर पर निर्भर है। यदि countचर अद्यतन करता है, तो प्रभाव फिर से चलेगा:

import { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function Counter() {
  const [count, setCount] = useState(0);
  const [calculation, setCalculation] = useState(0);

  useEffect(() => {
    setCalculation(() => count * 2);
  }, [count]); // <- add the count variable here

  return (
    <>
      <p>Count: {count}</p>
      <button onClick={() => setCount((c) => c + 1)}>+</button>
      <p>Calculation: {calculation}</p>
    </>
  );
}

ReactDOM.render(<Counter />, document.getElementById('root'));

यदि कई निर्भरताएँ हैं, तो उन्हें useEffectनिर्भरता सरणी में शामिल किया जाना चाहिए।


w3schools CERTIFIED . 2022

प्रमाणन हासिल करें!

रिएक्ट मॉड्यूल को पूरा करें, अभ्यास करें, परीक्षा दें और w3schools प्रमाणित बनें !!

$95 नामांकन

प्रभाव सफाई

स्मृति रिसाव को कम करने के लिए कुछ प्रभावों के लिए सफाई की आवश्यकता होती है।

टाइमआउट, सब्सक्रिप्शन, ईवेंट श्रोता और अन्य प्रभाव जिनकी अब आवश्यकता नहीं है, का निपटारा किया जाना चाहिए।

useEffectहम हुक के अंत में एक रिटर्न फ़ंक्शन को शामिल करके ऐसा करते हैं ।

उदाहरण:

useEffectहुक के अंत में टाइमर को साफ करें :

import { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function Timer() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    let timer = setTimeout(() => {
    setCount((count) => count + 1);
  }, 1000);

  return () => clearTimeout(timer)
  }, []);

  return <h1>I've rendered {count} times!</h1>;
}

ReactDOM.render(<Timer />, document.getElementById("root"));

नोट: टाइमर को साफ़ करने के लिए, हमें इसे नाम देना होगा।


व्यायाम के साथ खुद को परखें

व्यायाम:

useEffectहुक के दूसरे तर्क को केवल पहले रेंडर पर चलने तक सीमित करने के लिए आपको क्या जोड़ने की आवश्यकता है ?

import { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function App() {
  const [data, setData] = useState([]);

  useEffect(() => {
    setData(getData())
  }, );

  return <DisplayData data={data} />;
}

ReactDOM.render(<App />, document.getElementById('root'));