Управление состоянием React с отдачей
Что такое recoil.js для React?
recoil.js — это библиотека управления состоянием для React. Следовательно, его можно использовать вместо usestate в вашем проекте React.
Чем они отличаются друг от друга?
- Похоже на React (глобальная версия
useState
) - Вы можете очень легко управлять своим состоянием.
- Он имеет очень простые понятия, такие как атом и селектор.
- Очень чистая и простая рабочая модель.
Установка:
- для пакета npm: npm install recoil
- для пакета yarn: yarn add recoil
Исполняющее государство
Таким образом, в Recoil введены две концепции: атом и селекторы.
import React from 'react';
import { RecoilRoot } from 'recoil';
const App = () => {
return (
<RecoilRoot>
<Component1/>
<Component2/>
//...
</RecoilRoot>
);
}
Атом:
Атом представляет часть состояния. Атомы можно понимать как нечто, что можно читать и записывать из любого компонента.
Компоненты, связанные с этим атомом, будут автоматически перерисовываться после обновления атома.
const someState = atom({
key: 'someUniquekey', // unique for recoil internal reasons
default: '', // initial value of state/atom
});
Селектор представляет часть производного состояния. Вы можете думать об этом как о выводе передачи состояния функции, которая каким-то образом изменяет данное состояние.
const charCountState = selector({
key: 'charCountState', // Have to Be Unique
get: ({get}) => {
const text = get(someState); //pass a atom in this function
return text.length;
},
});
Использование состояния:
Есть два способа получить объявленное состояние в наших компонентах. то есть на useRecoilState
или useSetRecoilState
, useRecoilValue
.
useRecoilValue:
Всякий раз, когда вы хотите использовать значение состояния, но не хотите обновлять его во всем компоненте.
import { useRecoilValue } from 'recoil';
const CharacterCount = () => {
const count = useRecoilValue(charCountState);
//Name of the Atom or selector
return <>Character Count: {count}</>;
}
useRecoilState:
Всякий раз, когда вы хотите использовать значение состояния, а также хотите обновить его глобально через сам компонент.
import { useRecoilState } from 'recoil';
const TextInput = () => {
const [text, setText] = useRecoilState(someState);
const onChange = (event) => {
setText(event.target.value);
};
return (
<div>
<input type="text" value={text} onChange={onChange} />
<br />
Value of the state : {text}
</div>
);
}
useSetRecoilState:
Возвращает функцию установки, которую можно использовать асинхронно для изменения состояния. Сеттеру может быть передано новое значение или функция обновления, которая получает предыдущее значение в качестве аргумента.
import { useSetRecoilState } from 'recoil';
const TextInput = () => {
const setText = useSetRecoilState(someState); //CHANGE HERE
const onChange = (event) => {
setText(event.target.value);
};
return (
<>
//OTHER LOGIC
</>
);
}
Вывод:
Мы успешно реализовали глобальное состояние с помощью Recoil. Хоть это и была небольшая часть, но ее достаточно, чтобы использовать ее в своих проектах. Это развивающийся проект со многими изменениями, присутствующими явно в синтаксисе или под капотом. Так что я бы не советовал использовать его в больших проектах. Всегда можно попробовать что-то новое, и, на мой взгляд, если вам нравятся крючки, вам понравится использовать Recoil.
Ссылки: