Что используется useState() в React?

В настоящее время я изучаю концепцию хуков в React и пытаюсь понять приведенный ниже пример.

import { useState } from 'react';

function Example() {
    // Declare a new state variable, which we'll call "count"
    const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

Приведенный выше пример увеличивает счетчик самого параметра функции обработчика. Что делать, если я хочу изменить значение счетчика внутри функции обработчика событий

Рассмотрим пример ниже

setCount = () => {
  //how can I modify count value here. Not sure if I can use setState to modify its value
  //also I want to modify other state values as well here. How can I do that
}

<button onClick={() => setCount()}>
  Click me
</button>

Ответы

Ответ 1

Перехватчики реакции - это новый (все еще разрабатываемый) способ доступа к основным функциям реакции, таким как state, без необходимости использовать классы, в вашем примере, если вы хотите увеличить счетчик непосредственно в функции обработчика, не указывая его прямо в опоре onClick вы можете сделать что-то вроде:

...
const [count, setCounter] = useState(0);
const [moreStuff, setMoreStuff] = useState(...);
...

const setCount = () => {
    setCounter(count + 1);
    setMoreStuff(...);
    ...
};

и onClick:

<button onClick={setCount}>
    Click me
</button>

Давайте быстро объясним, что происходит в этой строке:

const [count, setCounter] = useState(0);

useState(0) возвращает кортеж, где первый параметр count - это текущее состояние счетчика, а setCounter - метод, который позволит нам обновить состояние счетчика. Мы можем использовать метод setCounter для обновления состояния count где угодно - в этом случае мы используем его внутри функции setCount, где мы можем делать больше вещей; Идея использования хуков заключается в том, что мы можем сделать наш код более функциональным и избегать основанных на классах компонентов, если они не нужны/не нужны.

Я написал полную статью о хуках с несколькими примерами (включая счетчики), такие как этот код, я использовал useState, useEffect, useContext и пользовательские хуки. Я мог бы получить более подробную информацию о том, как перехватчики работают с этим ответом, но документация очень хорошо объясняет перехватчик состояния и другие перехваты в деталях, надеюсь, это поможет.

обновление: Хукибольше не являются предложением, так как версия 16.8 теперь они доступны для использования, на сайте React есть раздел, отвечающий на некоторые часто задаваемые вопросы.

Ответ 2

useState - один из встроенных обработчиков реагирования, доступных в версии 0.16.7.

useState следует использовать только внутри функциональных компонентов. useState - это способ, если нам нужно внутреннее состояние и нам не нужно реализовывать более сложную логику, такую как методы жизненного цикла.

const [state, setState] = useState(initialState);

Возвращает значение с состоянием и функцию для его обновления.

Во время начального рендеринга возвращаемое состояние (состояние) совпадает со значением, переданным в качестве первого аргумента (initialState).

Функция setState используется для обновления состояния. Он принимает новое значение состояния и ставит в очередь повторную визуализацию компонента.

Обратите внимание, что useState вызов useState для обновления состояния ведет себя иначе, чем компоненты this.setState. Чтобы показать вам разницу, я подготовил два примера.

class UserInfoClass extends React.Component {
  state = { firstName: 'John', lastName: 'Doe' };
  
  render() {
    return <div>
      <p>userInfo: {JSON.stringify(this.state)}</p>
      <button onClick={() => this.setState({ 
        firstName: 'Jason'
      })}>Update name to Jason</button>
    </div>;
  }
}

// Please note that new object is created when setUserInfo callback is used
function UserInfoFunction() {
  const [userInfo, setUserInfo] = React.useState({ 
    firstName: 'John', lastName: 'Doe',
  });

  return (
    <div>
      <p>userInfo: {JSON.stringify(userInfo)}</p>
      <button onClick={() => setUserInfo({ firstName: 'Jason' })}>Update name to Jason</button>
    </div>
  );
}

ReactDOM.render(
  <div>
    <UserInfoClass />
    <UserInfoFunction />
  </div>
, document.querySelector('#app'));
<script src="https://unpkg.com/[email protected]/umd/react.development.js"></script>
<script src="https://unpkg.com/[email protected]/umd/react-dom.development.js"></script>

<div id="app"></div>

Ответ 3

Синтаксис хука useState прост.

const [value, setValue] = useState(defaultValue)

Если вы не знакомы с этим синтаксисом, перейдите сюда.

Я бы порекомендовал вам прочитать документацию. Есть отличные объяснения с приличным количеством примеров.

import { useState } from 'react';

function Example() {
    // Declare a new state variable, which we'll call "count"
    const [count, setCount] = useState(0);
  
  // its up to you how you do it
  const buttonClickHandler = e => {
   // increment
   // setCount(count + 1)
   
   // decrement
   // setCount(count -1)
   
   // anything
   // setCount(0)
  }
  

  return (
       <div>
          <p>You clicked {count} times</p>
         <button onClick={buttonClickHandler}>
             Click me
         </button>
      </div>
   );
 }

Ответ 4

useState - это одна из ловушек, доступных в React v16.8.0. В основном это позволяет вам превратить ваши в противном случае не сохраняющие состояния/функциональные компоненты в компоненты, которые могут иметь свое собственное состояние.

На самом базовом уровне она использовалась следующим образом:

const [isLoading, setLoading] = useState(true);

Затем это позволяет вам вызывать setLoading, передавая логическое значение. Это крутой способ иметь "сохраняющий состояние" функциональный компонент.

Ответ 5

Крюки - новая функция в React v16.7.0-alpha useState - это "Крюк". useState() устанавливает значение по умолчанию любой переменной и управляет компонентом функции (функции PureComponent). ex: const [count, setCount] = useState(0); установите значение по умолчанию count 0. и вы можете использовать setCount для incriment или decriment значения. onClick={() => setCount(count + 1)} подсчитывает значение счета. DOC

Ответ 6

useState() - это пример встроенного инструмента React hook, который позволяет использовать состояния в ваших функциональных компонентах. Это было невозможно до Реагирования 16.7.

Функция useState представляет собой встроенный крючок, который можно импортировать из реактивного пакета. Он позволяет добавлять состояние к вашим функциональным компонентам. Используя привязку useState внутри функционального компонента, вы можете создать кусок состояния без переключения на компоненты класса.

ПРИМЕЧАНИЕ. Обратите внимание, что в настоящее время Крюки находятся в альфа-версии, поэтому они еще не готовы к производству. Это также означает, что API может измениться.

Ответ 7

useState() является крючком React. Хуки позволяют использовать состояние и изменчивость внутри компонентов функций.

Хотя вы не можете использовать хуки внутри классов, вы можете обернуть свой компонент класса функцией one и использовать хуки из нее. Это отличный инструмент для переноса компонентов из класса в форму функции. Вот полный пример:

Для этого примера я буду использовать счетчик компонентов. Вот оно:

class Hello extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: props.count };
  }
  
  inc() {
    this.setState(prev => ({count: prev.count+1}));
  }
  
  render() {
    return <button onClick={() => this.inc()}>{this.state.count}</button>
  }
}

ReactDOM.render(<Hello count={0}/>, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id='root'></div>

Ответ 8

МИГ 21 Кесе дия. Я не должен говорить вам, майор

Из тюрьмы Адияла, Индия