Это расширенная версия состояния, мы использовали единственное состояние в React. А теперь мы будем использовать множественное состояние в нашем веб-приложении. Мы попытаемся изучить несколько состояний, разработав приложение для голосования.

import React from 'react';
import {useState} from 'react';
export const App = () => {
  const [candidate1, setCandidate1] = useState(0)
  const [candidate2, setCandidate2] = useState(0)
  const [candidate3, setCandidate3] = useState(0)
return (
    <div>
      {candidate1}
      <button onClick={() => setCandidate1(candidate1 + 1)}>
        Ramesh
      </button>
      <hr/>
      {candidate2}
       <button onClick={() => setCandidate2(candidate2 + 1)}>
        Umesh
      </button>
      <hr/>
      {candidate3}
       <button onClick={() => setCandidate3(candidate3 + 1)}>
        Suresh
      </button>
    </div>
  )
}

Создайте новый проект реакции, используя npx, и замените файл App.js на этот. Какова наша повестка дня, давайте обсудим. В комитете 30 членов. Они хотят выбрать одного члена в качестве руководителя комитета. Итак, они организовали выборы, и тот, кто наберет наибольшее количество голосов, станет руководителем комитета.

Иметь ввиду-

1-3 участника участвуют в выборах .

2- Всего 30 членов, включая участников.

import React from 'react';
import { useState } from 'react';
export const App = () => {
    const [candidate1, setCandidate1] = useState(0)
    const [candidate2, setCandidate2] = useState(0)
    const [candidate3, setCandidate3] = useState(0)
    const [count, setCount] = useState(0)
    const handleone = () => {
        setCandidate1(candidate1 + 1)
        setCount(count + 1)
    }
    const handletwo = () => {
        setCandidate2(candidate2 + 1)
        setCount(count + 1)
    }
    const handlethree = () => {
        setCandidate3(candidate3 + 1)
        setCount(count + 1)
    }
return (
        <div>
            {count}
            <hr />
{candidate1}
            <button onClick={handleone}>
                Ramesh
            </button>
            <hr />
            {candidate2}
            <button onClick={handletwo}>
                Umesh
            </button>
            <hr />
            {candidate3}
            <button onClick={handlethree}>
                Suresh
            </button>
        </div>
    )
}

Мы можем заменить count, используя {candidate1+candidate2+candidate3}, но я оставлю count. Это поможет нам узнать больше о состояниях.

import React from 'react';
import {useState} from 'react';
export const App = () => {
  const [vote, setVote]= useState({
    candidate1:0,candidate2:0, candidate3:0
  })
  const [count, setCount]= useState(0)
const handleone=()=>{
    const newVote= {candidate1: vote.candidate1+1, candidate2:vote.candidate2, candidate3:vote.candidate3} ;setVote(newVote)
    setCount(count+1)
  }
  const handletwo=()=>{
    const newVote= {candidate1: vote.candidate1, candidate2:vote.candidate2+1, candidate3:vote.candidate3} ;setVote(newVote)
    setCount(count+1)
  }
  const handlethree=()=>{
    const newVote= {candidate1: vote.candidate1, candidate2:vote.candidate2, candidate3:vote.candidate3+1} ;setVote(newVote)
    setCount(count+1)
  }
return (
    <div>
       {count}
       <hr/>
{vote.candidate1}
      <button onClick={handleone}>
        Ramesh
      </button>
      <hr/>
      {vote.candidate2}
       <button onClick={handletwo}>
        Umesh
      </button>
      <hr/>
      {vote.candidate3}
       <button onClick={handlethree}>
        Suresh
      </button>
    </div>
  )
}

Теперь в этой модифицированной версии мы только что объединили все состояния в одно состояние, подобное этому.

const [vote, setVote]= useState({
    candidate1:0,candidate2:0, candidate3:0
  })

А в обработчике событий мы создали новый набор голосов и назначили его setVote . Вы можете отформатировать код, используя SHIFT+ALT+F.

Мы можем использовать концепцию копирования массива. Мы можем создать массив copy из vote, используя оператор спреда ....

import React from 'react';
import { useState } from 'react';
export const App = () => {
  const [vote, setVote] = useState({
    candidate1: 0, candidate2: 0, candidate3: 0
  })
  const [count, setCount] = useState(0)
const handleone = () => {
    const newVote = {...vote, candidate1: vote.candidate1 + 1};      setVote(newVote)
    setCount(count + 1)
  }
  const handletwo = () => {
    const newVote = {...vote, candidate2: vote.candidate2 + 1};   setVote(newVote)
    setCount(count + 1)
  }
  const handlethree = () => {
    const newVote = { ...vote, candidate3: vote.candidate3 + 1 }; setVote(newVote)
    setCount(count + 1)
  }
return (
    <div>
      {count}
      <hr />
      {vote.candidate1}
      <button onClick={handleone}>
        Ramesh
      </button>
      <hr />
      {vote.candidate2}
      <button onClick={handletwo}>
        Umesh
      </button>
      <hr />
      {vote.candidate3}
      <button onClick={handlethree}>
        Suresh
      </button>
    </div>
  )
}

Всегда ли нам нужно создавать новый набор голосов? Нет, мы можем напрямую назначить setVote, скопировать и изменить массив.

import React from 'react';
import { useState } from 'react';
export const App = () => {
    const [vote, setVote] = useState({
        candidate1: 0, candidate2: 0, candidate3: 0
    })
    const [count, setCount] = useState(0)
    const handleone = () => {
        setVote({ ...vote, candidate1: vote.candidate1 + 1 })
        setCount(count + 1)
    }
    const handletwo = () => {
        setVote({ ...vote, candidate2: vote.candidate2 + 1 })
        setCount(count + 1)
    }
    const handlethree = () => {
        setVote( { ...vote, candidate3: vote.candidate3 + 1 })
        setCount(count + 1)
    }
return (
        <div>
            {count}
            <hr />
            {vote.candidate1}
            <button onClick={handleone}>
                Ramesh
            </button>
            <hr />
            {vote.candidate2}
            <button onClick={handletwo}>
                Umesh
            </button>
            <hr />
            {vote.candidate3}
            <button onClick={handlethree}>
                Suresh
            </button>
        </div>
    )
}

Теперь все готово, осталось разработать несколько условий, например, теперь каждый может видеть голос каждого кандидата во время голосования. Мы сделаем его конфиденциальным. Никто не может голосовать после 30 голосов. И после 30 голосов мы можем увидеть результат.

Таким образом, эти концепции могут быть рассмотрены в следующем чтении. Conditional Rendering .