Fix: race condition on useRecoilObjectWithImmer (#45)

This commit is contained in:
ezksd 2020-07-18 00:25:51 +08:00 committed by GitHub
parent 01bc3ce6a5
commit 6e6c9eba2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,16 +10,16 @@ export function useRecoilObjectWithImmer<T> (value: RecoilState<T>) {
function set<K extends keyof Draft<T>> (f: (draft: Draft<T>) => void | T): void
function set<K extends keyof Draft<T>> (data: any, value?: Draft<T>[K]): void {
if (typeof data === 'string') {
rawSet(produce(copy, (draft: Draft<T>) => {
rawSet(pre => produce(pre, (draft: Draft<T>) => {
const key = data as K
const v = value
draft[key] = v
}))
} else if (typeof data === 'function') {
const fn = data as (draft: Draft<T>) => void | T
rawSet(produce(copy, fn) as T)
rawSet(pre => produce(pre, fn) as T)
} else if (typeof data === 'object') {
rawSet(produce(copy, (draft: Draft<T>) => {
rawSet(pre => produce(pre, (draft: Draft<T>) => {
const obj = data as Draft<T>
for (const key of Object.keys(obj)) {
const k = key as keyof Draft<T>