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

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

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

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

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

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

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


रिएक्ट useCallbackहुक एक मेमोइज्ड कॉलबैक फ़ंक्शन देता है।

संस्मरण को एक मूल्य के रूप में कैशिंग के रूप में सोचें ताकि इसे पुनर्गणना करने की आवश्यकता न हो।

यह हमें संसाधन गहन कार्यों को अलग करने की अनुमति देता है ताकि वे प्रत्येक रेंडर पर स्वचालित रूप से नहीं चलेंगे।

हुक केवल तभी चलता है जब उसकी कोई useCallbackएक निर्भरता अद्यतन होती है।

इससे प्रदर्शन में सुधार हो सकता है।

और हुक समान हैं useCallbackuseMemoमुख्य अंतर यह है कि useMemoएक मेमोइज्ड वैल्यू लौटाता है और useCallbackएक मेमोइज्ड फंक्शन देता है । यूज़मेमो चैप्टर में आप यूज़मेमो के बारे में अधिक जान सकते हैं


मुसीबत

उपयोग करने का एक कारण useCallbackएक घटक को फिर से प्रस्तुत करने से रोकना है जब तक कि उसके प्रॉप्स में बदलाव न हो।

इस उदाहरण में, आप सोच सकते हैं कि Todosघटक तब तक पुन: प्रस्तुत नहीं करेगा जब तक कि todosपरिवर्तन न हो:

यह React.memo सेक्शन में दिए गए उदाहरण के समान है।

उदाहरण:

index.js

import { useState } from "react";
import ReactDOM from "react-dom";
import Todos from "./Todos";

const App = () => {
  const [count, setCount] = useState(0);
  const [todos, setTodos] = useState([]);

  const increment = () => {
    setCount((c) => c + 1);
  };
  const addTodo = () => {
    setTodos((t) => [...t, "New Todo"]);
  };

  return (
    <>
      <Todos todos={todos} addTodo={addTodo} />
      <hr />
      <div>
        Count: {count}
        <button onClick={increment}>+</button>
      </div>
    </>
  );
};

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

Todos.js

import { memo } from "react";

const Todos = ({ todos, addTodo }) => {
  console.log("child render");
  return (
    <>
      <h2>My Todos</h2>
      {todos.map((todo, index) => {
        return <p key={index}>{todo}</p>;
      })}
      <button onClick={addTodo}>Add Todo</button>
    </>
  );
};

export default memo(Todos);

इसे चलाने का प्रयास करें और काउंट इंक्रीमेंट बटन पर क्लिक करें।

आप देखेंगे कि Todosघटक परिवर्तन न होने पर भी पुन: प्रस्तुत करता todosहै।

यह काम क्यों नहीं करता? हम उपयोग कर रहे हैं memo, इसलिए Todosघटक को फिर से प्रस्तुत नहीं करना चाहिए क्योंकि गिनती बढ़ने पर न तो todosराज्य और न ही फ़ंक्शन बदल रहे हैं।addTodo

यह "संदर्भात्मक समानता" नामक किसी चीज़ के कारण है।

हर बार जब कोई घटक पुन: प्रस्तुत करता है, तो उसके कार्य पुन: निर्मित हो जाते हैं। इस वजह से, addTodoफ़ंक्शन वास्तव में बदल गया है।


w3schools CERTIFIED . 2022

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

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

$95 नामांकन

समाधान

इसे ठीक करने के useCallbackलिए, जब तक आवश्यक न हो, फ़ंक्शन को फिर से बनाने से रोकने के लिए हम हुक का उपयोग कर सकते हैं।

घटक को अनावश्यक रूप से पुन: प्रस्तुत useCallbackकरने से रोकने के लिए हुक का उपयोग करें :Todos

उदाहरण:

index.js

import { useState, useCallback } from "react";
import ReactDOM from "react-dom";
import Todos from "./Todos";

const App = () => {
  const [count, setCount] = useState(0);
  const [todos, setTodos] = useState([]);

  const increment = () => {
    setCount((c) => c + 1);
  };
  const addTodo = useCallback(() => {
    setTodos((t) => [...t, "New Todo"]);
  }, [todos]);

  return (
    <>
      <Todos todos={todos} addTodo={addTodo} />
      <hr />
      <div>
        Count: {count}
        <button onClick={increment}>+</button>
      </div>
    </>
  );
};

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

Todos.js

import { memo } from "react";

const Todos = ({ todos, addTodo }) => {
  console.log("child render");
  return (
    <>
      <h2>My Todos</h2>
      {todos.map((todo, index) => {
        return <p key={index}>{todo}</p>;
      })}
      <button onClick={addTodo}>Add Todo</button>
    </>
  );
};

export default memo(Todos);

अब Todosघटक केवल तभी फिर से प्रस्तुत होगा जब todosप्रोप बदल जाएगा।