SolidJS中createComputed双依赖场景下快速切换fen()导致首个依赖响应性丢失问题咨询
SolidJS中createComputed双依赖场景下快速切换fen()导致首个依赖响应性丢失问题咨询
大家好,我最近在SolidJS项目里用createComputed的时候碰到了一个响应性相关的问题,想过来请教下各位!
先贴一下我当前的代码片段:
createComputed(on(() => { let pvs = stockfish.pvs[fen()] console.log('dep', fen(), pvs) if (pvs) { let res: [FEN, MultiPV] = [fen(), pvs] return res } }, on_fen_eval_request_resolved))
这段代码里的createComputed绑定了两个依赖:一个是stockfish.pvs这个响应式对象,另一个是fen()这个返回当前棋局FEN字符串的响应式函数。原本的逻辑是想在fen()变化或者stockfish.pvs里对应FEN的计算结果更新时,触发后续的处理。
但实际运行时发现了问题:当我快速连续切换fen()的值时(也就是短时间内多次调用改变fen()的响应式状态),还没等stockfish.pvs针对前一个FEN的计算结果返回,下一次fen()变更就触发了。这时候就出现了stockfish.pvs的响应性好像“丢失”了的情况——后续哪怕stockfish.pvs里对应新FEN的pvs值更新了,这个createComputed里的逻辑也没按预期触发,console里也看不到对应的日志输出。
我自己初步排查了下,有几个疑问点:
- 是不是
fen()的高频更新打断了SolidJS对stockfish.pvs的依赖追踪? - 或者
on函数的调度策略在这种场景下,有没有什么需要额外配置的地方来保证两个依赖都能被正确监听? - 有没有什么调整方式,能确保不管
fen()切换得有多快,stockfish.pvs的响应性都不会丢失,计算逻辑能正确捕获到两个依赖的变化?
希望有遇到过类似场景或者熟悉SolidJS响应式原理的大佬能给我点思路,谢谢啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

