An open API service indexing awesome lists of open source software.

https://github.com/zengxiaoluan/use-atom-store

Easy manage your React external store.
https://github.com/zengxiaoluan/use-atom-store

react-store reacthooks reactjs use-atom valtio

Last synced: 4 months ago
JSON representation

Easy manage your React external store.

Awesome Lists containing this project

README

        

# use-atom-store

This library is aim to handle outer store's state in your react component that which solved the render accurately problem, I hope you will enjoy it.

```shell
npm i use-atom-store -S
```

You can use this like:

```jsx
import { createAtomStore, useAtomStore } from "use-atom-store";

let myStore = createAtomStore({ count: 0, hello: "hello" }); // create a store

function changeHello() {
myStore.setState((prev) => {
return {
...prev,
hello: prev.hello + "world",
};
});
}

function changeCount() {
myStore.setState((prev) => {
return {
...prev,
count: prev.count + 1,
};
});
}

export default function App() {
return (

Change Hello
Change Count




);
}

let helloRenderTimes = 0;
function DisplayHello() {
let [state, setState] = useAtomStore(myStore, (state) => ({
hello: state.hello,
}));

return (

{
setState((prev) => ({ ...prev, hello: prev.hello + "world" }));
}}
>
{state.hello} - helloRenderTimes: {++helloRenderTimes}

);
}

let countRenderTimes = 0;
function DisplayCount() {
let [state, setState] = useAtomStore(myStore, (state) => ({
count: state.count,
}));

return (

{
setState((prev) => ({ ...prev, count: prev.count + 1 }));
}}
>
{state.count} - countRenderTimes: {++countRenderTimes}

);
}
```

## Automatic collect state of a store

If you want automatic collect state which you used in current component, you can use another api `createAutoStore` and `useAutoStore`, below is the demo:

```javascript
import { memo } from "react";
import "./App.css";
import { createAutoStore, useAutoStore } from "./use-atom-store";

let testAutoStore = createAutoStore({ a: 1, b: 2, c: 3 });

function App() {
let state = useAutoStore(testAutoStore);
console.log("render A/B/C");

state.a;
state.b;
state.c;

return (


{
state.a++;
}}
>
parent





);
}

let A = memo(function A() {
let state = useAutoStore(testAutoStore);
console.log("render A");

return testAutoStore.a++}>a{state.a};
});

let B = memo(function B() {
let state = useAutoStore(testAutoStore);
console.log("render B");

return testAutoStore.b++}>b{state.b};
});

let C = memo(function C() {
let state = useAutoStore(testAutoStore);
console.log("render C");

if (state.c > 5 && state.c < 10)
return testAutoStore.c--}>c{state.c};

return testAutoStore.c++}>c{state.c};
});

export default App;
```