Simple atomic state that can be updated outside of React components
Simple Atom
Simple atomic state that can be updated outside React.
Why simple-atom
?
-
Update state outside of a React component.
-
No need for React Context, store your atoms in global scope.
-
Familiar API, identical to
React.setState
. -
First class Typescript support.
-
It’s simple, open source and it’s tiny! <250 bytes gzipped.
Installation
npm install simple-atom
Please ensure you have installed react
at version v16.8.0
or higher.
Usage
Basic example
import React from 'react';
// Import 'simple-atom'
import { createAtom, useAtom } from 'simple-atom';
// Create an atom with 'createAtom'
const userAtom = createAtom({ name: 'James', age: 25 });
const MyComponent = () => {
// Get current value and setter function with 'useAtom' hook
const [user, setUser] = useAtom(userAtom);
if (!user) {
return (
<h1>You are logged out</h1>
);
}
return (
<button onClick={() => setUser(null)}>
Logout
</button>
);
}
Update component state outside of React
// MyComponent.jsx
import React from 'react';
import { createAtom, useAtom } from 'simple-atom';
export const isLoadingAtom = createAtom(false);
const MyComponent = () => {
const [isLoading] = useAtom(isLoadingAtom);
if (isLoading) {
return (
<div>Loading, please wait...</div>
);
}
return (
// ...
);
}
// misc-application-logic.js
import { isLoadingAtom } from './MyComponent.jsx'
// MyComponent will now re-render with the updated isLoading state
isLoadingAtom.value = true;
With Typescript
import { createAtom } from 'simple-atom';
type User = { name: string, age: number } | null;
const userAtom = createAtom<User>({ name: 'James', age: 25 });
Acknowledgements
This package was inspired by these projects.
Authors
Contributions are always welcome! ?