Scalajs-react报Cannot read properties of null (reading 'value')错误求助
问题原因
这是React合成事件的池化特性导致的:React会复用合成事件对象,事件触发回调执行完成后,事件对象的所有属性都会被清空重置。你在modState的状态更新回调中访问event.target时,该回调是异步执行的,此时事件对象已经被回收,event.target已经被置为null,因此抛出读取value属性失败的错误。
解决方案
有两种修复方式,推荐使用第一种:
- 提前从事件对象中取出需要的属性,不要在异步的状态更新回调中访问事件对象
修改后的updatePersonName代码如下:
def updatePersonName(event: ReactEventFromInput): Callback = { // 同步阶段先提取输入值,避免后续异步访问已回收的事件对象 val newName = event.target.value $.modState(person => person.copy(name = newName)) }
- 若需要保留完整事件对象供后续使用,调用事件的
persist()方法将其从事件池中移出,避免被回收:
def updatePersonName(event: ReactEventFromInput): Callback = { event.persist() $.modState(person => person.copy(name = event.target.value)) }
注意:第二种方式存在额外性能开销,仅在确实需要完整事件对象时使用。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

