Skip to content

Instantly share code, notes, and snippets.

@chenyong
Created December 10, 2018 11:47
Show Gist options
  • Save chenyong/262c3b1d81f8952d3e63f1de183744c7 to your computer and use it in GitHub Desktop.
Save chenyong/262c3b1d81f8952d3e63f1de183744c7 to your computer and use it in GitHub Desktop.
Helper functions to use Immer in React projects.
import produce from "immer";
export interface ImmerStateFunc<S> {
(f: ((s: S) => void)): Promise<any>;
}
export interface MergeStateFunc<S> {
(partialState: Partial<S>): Promise<any>;
}
export let immerHelpers = {
setState: (...f: any[]) => void {},
async immerState<S>(f: ((s: S) => void)): Promise<any> {
return new Promise((resolve) => {
this.setState(produce<any>(f), () => {
resolve();
});
});
},
async mergeState<S>(partialState: Partial<S>): Promise<any> {
let newState = produce<S>((state) => {
Object.assign(state, partialState);
});
return new Promise((resolve) => {
this.setState(newState, () => {
resolve();
});
});
},
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment