immer icon indicating copy to clipboard operation
immer copied to clipboard

support property produce hook

Open millievn opened this issue 1 year ago • 0 comments

immer use Reflect.ownKeys to loop all property and developer cannot do anything. can we support hooks during property and value edit?

https://github.com/immerjs/immer/blob/e2d222bd4fb26abded04075c936290715e9ee335/src/utils/common.ts#L75

for example:


const child = {
id: 1,
name:"1",
children: null
}

const parentNode = {
id: 1,
name:"1",
children: [child],
_parent: null
}

child._parent = parentNode

when produce next state, _parent cause circle refer problem and throw error.

i know immer have the rule Immer only supports unidirectional trees but can we do like this?


function user_defined_iter(key, value, obj, basic_iter){
  if(key === '_parent'){
    obj[key] = value
  }else {
    basic_iter(key, obj[key], obj)
 }
}

Reflect.ownKeys(obj).forEach(key => {
 user_defined_iter(key, obj[key], obj), iter)
})

current temporary way is to loop all nodes but if the tree is too large add deep, it may cause another performance error.

millievn avatar Aug 03 '24 15:08 millievn