Git Product home page Git Product logo

Comments (11)

dai-shi avatar dai-shi commented on June 8, 2024 1

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.

dai-shi avatar dai-shi commented on June 8, 2024

Hi, I wish somebody helps on it. Some quick questions:

  1. Do you mean to use AsyncStorage in RN?
  2. 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.

Temirtator avatar Temirtator commented on June 8, 2024

@dai-shi

  1. 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.

  2. 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.

dai-shi avatar dai-shi commented on June 8, 2024

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.

Temirtator avatar Temirtator commented on June 8, 2024

@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.

Temirtator avatar Temirtator commented on June 8, 2024

@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.

Temirtator avatar Temirtator commented on June 8, 2024

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.

Temirtator avatar Temirtator commented on June 8, 2024

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.

dai-shi avatar dai-shi commented on June 8, 2024

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.

Temirtator avatar Temirtator commented on June 8, 2024

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.

dai-shi avatar dai-shi commented on June 8, 2024

v2 is released and closing this.

from react-hooks-global-state.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.