这是我拥有的复杂数据结构的简化版本:
const todos = [
{done: false, text: '...', tags: [{text: '...'}, {text: '...'}]}
]
为了利用反冲的力量,我将结构分解为不同的原子族,并通过唯一的 ID 将它们链接起来:
const tag = atomFamily({...});
const todo = atomFamily({...});
const todos = atom({...});
// The state looks something like this:
// todos = ['id1', 'id2'];
// todo('id1') = {done: false, text: '...', tags: ['id1', 'id2']}
// tag('id1') = {text: '...'}
但是像这样打破结构会给代码增加很多复杂性。例如,当我todo
向列表中添加一个新元素时,我必须遍历列表tags
并创建标记原子。
同样,当我删除 a 时,todo
我必须遍历所有内部tag
原子并将它们也删除。嵌套越深,这就越复杂。
有没有像这样雾化深度嵌套结构的最佳实践?