Comments (11)
saving to database asynchronously would be relatively easy.
const container = createGlobalState(...);
const setGlobalState = async (key, value) => {
container.setGobalState(key, value);
await saveToDatabase(key, container.getGlobalState(key));
};
const useGlobalState = (key) => {
const [value, setValue] = container.useGlobalState(key);
const setValueAndSave = useCallback(async (newValue) => {
setValue(newValue);
await saveToDatabase(key, container.getGlobalState(key));
}, [setValue]);
return [value, setValueAndSave];
};
export { setGlobalState, useGlobalState };
One caveat is saving the data from somewhere else will lead inconsistency.
from react-hooks-global-state.
Hi, I wish somebody helps on it. Some quick questions:
- Do you mean to use AsyncStorage in RN?
- If the write operation is async, do you think the store should hold the old value or the new one while the async operation is in process?
from react-hooks-global-state.
-
In 2nd example, there is localStorage(similarly i can use AsyncStorage), but this is not good practice. Im think about, if there's any possibility to do something like redux-offline but based on react hooks without redux.
-
New one
Actually, i need this feature to save my incomplete requests because of bad internet, so i could send them later.
from react-hooks-global-state.
I see.
Could you elaborate what is not good practice and how redux-offline works for it?
Thanks. I think this would be a good discussion to come up with an idea / a suggestion.
from react-hooks-global-state.
@dai-shi There is case, when i need to save many files, at least 200 or 300 files. The read/write operations are quite slow compared to any other storage systems. AsyncStorage doesnโt offer any offline Capability unless you bind it with another full-scale database like SQLite, or Realm.
https://www.simform.com/react-native-database-selection-guide/#5
Also, found out that redux-offline uses, redux-persist library, and redux-persist library uses AsyncStorage for persistence of data on RN.
So, im decided to use one of the databases for my requests.
from react-hooks-global-state.
@dai-shi Maybe, u can bind library with sqlite database for persistence of data?
For example, create saveRequest(key, value) method, where value is some object which contain props like params, methodType, headers, and so on.
And all operations will be working with sqlite database.
from react-hooks-global-state.
Hello @dai-shi , i found out problem with getting saved data
const initialStringFromStorage = AsyncStorage.getItem(persistenceKey) => returns Promise
const initialState = initialStringFromStorage === null
? firstState
: JSON.parse(initialStringFromStorage)
here's initialStringFromStorage is promise, not string
from react-hooks-global-state.
Also
const persistentReducer = (state, action) => {
const mutated = myReducer(state, action)
AsyncStorage.setItem(persistenceKey, JSON.stringify(mutated)) => should be asynchronously
return mutated
}
from react-hooks-global-state.
AsyncStorage.setItem(persistenceKey, JSON.stringify(mutated)) => should be asynchronously
It's fine, unless you need to deal with possible errors.
here's initialStringFromStorage is promise, not string
Yeah, you can't take the same approach for async.
What I would imagine is something like this.
const initialState = { ... }; // some initial values until hydration is finished
AsyncStorage.getItem(persistenceKey).then((loadedState) => {
Object.keys(loadedState).forEach((key) => {
setGlobalState(key, loadedState[key]);
});
});
BTW, in v2, we will provide a new API which doesn't require the forEach above.
from react-hooks-global-state.
AsyncStorage.setItem(persistenceKey, JSON.stringify(mutated)) => should be asynchronously
It's fine, unless you need to deal with possible errors.
here's initialStringFromStorage is promise, not string
Yeah, you can't take the same approach for async.
What I would imagine is something like this.const initialState = { ... }; // some initial values until hydration is finished AsyncStorage.getItem(persistenceKey).then((loadedState) => { Object.keys(loadedState).forEach((key) => { setGlobalState(key, loadedState[key]); }); });BTW, in v2, we will provide a new API which doesn't require the forEach above.
thanks for answer, new feature would be nice
from react-hooks-global-state.
v2 is released and closing this.
from react-hooks-global-state.
Related Issues (20)
- getGlobalState should not be used in render HOT 5
- Error calling createStore (Typescript 3.6.4) HOT 2
- Question: how do developers use this library? HOT 1
- Please add CHANGELOG for 0.17.0 HOT 1
- getGlobalState loses sync with useGlobalState after 0.17 HOT 8
- How to use Redux Devtools Extension HOT 3
- comparison to react-tracked and initial values for a state HOT 9
- Error: You cannot use <GlobalStateProvider> more than once. HOT 5
- How to separate reducer and Action Type then call it to combineReducers (Ex: 07_middleware) HOT 3
- Be able to access multiple state keys with a single hook HOT 3
- Mocking useGlobalState with jest? HOT 8
- Restoring initial state from localStorage, if any? HOT 10
- global state not preserved with Fast Refresh HOT 2
- Argument of type '"cart"' is not assignable to parameter of type 'never' HOT 5
- Asynchronous initial state HOT 4
- Is it possible to change a value outside a component? HOT 2
- Persistence with createGlobalState HOT 6
- How to easily reset state? HOT 1
- How to update the state in Bulk ? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-hooks-global-state.