TypeScript Academy · पाठ

स्टेट और रिड्यूसर; Context टाइपिंग

useState और useReducer से कंपोनेंट स्टेट प्रबंधित करें, फिर सुरक्षित कस्टम हुक के साथ स्टेट को टाइप किए गए Context में ऊपर उठाएँ।

पाठ 2, कुल 3 में से8 चरण

स्टेट और रिड्यूसर; Context टाइपिंग, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 3 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

परिचय

लक्ष्य: स्थानीय स्थिति (useState) से शुरू करें, टाइप किए गए रिड्यूसर (useReducer) तक जाएँ, फिर सुरक्षित कस्टम हुक के साथ स्थिति को टाइप किए गए Context में साझा करें।

  • स्थिति और क्रियाओं का स्पष्ट मॉडल बनाएँ
  • डिस्क्रिमिनेटेड यूनियन को प्राथमिकता दें
  • Context तक पहुँच की सुरक्षा करें

टाइप किया गया useState

स्थिति पर ठोस प्रकार का एनोटेशन लगाएँ (जैसे, number)। तेज़ी से होने वाले अपडेट में पुराने क्लोज़र से बचने के लिए अपडेटर रूप का उपयोग करें।

import React, { useState } from "react"

export default function Counter() {
  const [count, setCount] = useState<number>(0)

  const inc = () => setCount(c => c + 1)
  const dec = () => setCount(c => c - 1)

  return (
    <div style={{ display: "grid", gap: 8 }}>
      <div>Count: {count}</div>
      <div style={{ display: "flex", gap: 8 }}>
        <button onClick={inc}>+1</button>
        <button onClick={dec}>-1</button>
      </div>
    </div>
  )
}

टाइप किया गया useReducer

क्रिया को डिस्क्रिमिनेटेड यूनियन के रूप में मॉडल करें। switch सभी मामलों को कवर करता रहेगा; हर शाखा के पेलोड का प्रकार अलग-अलग तय होगा।

import React, { useReducer } from "react"

type State = { count: number }

type Action =
  | { type: "inc" }
  | { type: "add"; by: number }
  | { type: "reset" }

function reducer(s: State, a: Action): State {
  switch (a.type) {
    case "inc": return { count: s.count + 1 }
    case "add": return { count: s.count + a.by }
    case "reset": return { count: 0 }
  }
}

export default function App() {
  const [state, dispatch] = useReducer(reducer, { count: 0 })
  return (
    <div style={{ display: "grid", gap: 8 }}>
      <div>Count: {state.count}</div>
      <button onClick={() => dispatch({ type: "inc" })}>+1</button>
      <button onClick={() => dispatch({ type: "add", by: 5 })}>+5</button>
      <button onClick={() => dispatch({ type: "reset" })}>Reset</button>
    </div>
  )
}

Context और हुक

Context<T | null> बनाएँ, फिर ऐसा कस्टम हुक उपलब्ध कराएँ जो null होने पर त्रुटि उत्पन्न करे। इससे उपयोगकर्ता का कोड सरल और अच्छी तरह टाइप किया हुआ रहता है।

import React, { createContext, useContext, useReducer } from "react"

type State = { count: number }

type Action = { type: "inc" } | { type: "add"; by: number } | { type: "reset" }

function reducer(s: State, a: Action): State {
  switch (a.type) {
    case "inc": return { count: s.count + 1 }
    case "add": return { count: s.count + a.by }
    case "reset": return { count: 0 }
  }
}

type Ctx = { state: State; dispatch: React.Dispatch<Action> }

const CounterCtx = createContext<Ctx | null>(null)

export function useCounter() {
  const ctx = useContext(CounterCtx)
  if (!ctx) throw new Error("useCounter must be used within CounterProvider")
  return ctx
}

export function CounterProvider({ children }: { children: React.ReactNode }) {
  const [state, dispatch] = useReducer(reducer, { count: 0 })
  return <CounterCtx.Provider value={{ state, dispatch }}>{children}</CounterCtx.Provider>
}

export default function App() {
  return (
    <CounterProvider>
      <Inner />
    </CounterProvider>
  )
}

function Inner() {
  const { state, dispatch } = useCounter()
  return (
    <div style={{ display: "grid", gap: 8 }}>
      <div>Count: {state.count}</div>
      <button onClick={() => dispatch({ type: "inc" })}>+1</button>
    </div>
  )
}

Context और रिड्यूसर पैटर्न

घटकों के बीच पढ़ने और डिस्पैच करने की ज़िम्मेदारियाँ अलग करें। प्रदाता चिल्ड्रेन को रैप करता है और टाइप की गई स्थिति व डिस्पैच उपलब्ध कराता है।

import React from "react"
import { CounterProvider, useCounter } from "./ctx"

function Controls() {
  const { dispatch } = useCounter()
  return (
    <div style={{ display: "flex", gap: 8 }}>
      <button onClick={() => dispatch({ type: "inc" })}>+1</button>
      <button onClick={() => dispatch({ type: "add", by: 10 })}>+10</button>
      <button onClick={() => dispatch({ type: "reset" })}>Reset</button>
    </div>
  )
}

function View() {
  const { state } = useCounter()
  return <div>Count: {state.count}</div>
}

export default function App() {
  return (
    <CounterProvider>
      <div style={{ display: "grid", gap: 8 }}>
        <View />
        <Controls />
      </div>
    </CounterProvider>
  )
}

सर्वोत्तम अभ्यास

सर्वोत्तम अभ्यास:

  • स्थिति को न्यूनतम रखें और बाकी मान प्राप्त करें।
  • क्रियाओं के लिए डिस्क्रिमिनेटेड यूनियन को प्राथमिकता दें।
  • कस्टम हुक से Context तक पहुँच सुरक्षित करें।

Context टाइपिंग जाँच

त्वरित जाँच: React Context का प्रकार तय करने का सुरक्षित तरीका क्या है?

पुनरावलोकन

पुनरावलोकन: useState से शुरू करें, useReducer से बदलावों का मॉडल बनाएँ और साझा स्थिति को कस्टम हुक से सुरक्षित किए गए टाइप किए गए Context में रखें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
101
पाठ
352

अक्सर पूछे जाने वाले प्रश्न

क्या “स्टेट और रिड्यूसर; Context टाइपिंग” पाठ निःशुल्क है?

हाँ—“स्टेट और रिड्यूसर; Context टाइपिंग” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

“स्टेट और रिड्यूसर; Context टाइपिंग” में मैं क्या सीखूँगा?

useState और useReducer से कंपोनेंट स्टेट प्रबंधित करें, फिर सुरक्षित कस्टम हुक के साथ स्टेट को टाइप किए गए Context में ऊपर उठाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 2वाँ पाठ है।

“स्टेट और रिड्यूसर; Context टाइपिंग” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. प्रॉप्स और children; इवेंट हैंडलर; refs
  2. स्टेट और रिड्यूसर; Context टाइपिंग
  3. कंपोनेंट जेनेरिक — परिचय
← TypeScript Academy पर वापस जाएँ