const clickZan = async function (e) {
if (!token) {
alert("请先登录");
} else {
console.log(e.target);
const commentid = e.target.getAttribute("commentid");
debugger;
const result = await reqZan(token, commentid);
e.target.className = "iconfont icon-zan red";
}
};
1
yyss8 2020-04-07 05:38:26 +08:00 via iPhone
断点里也是 null ? 如果只是 console 出来的是 null 那么可以深度复制一个 e 的内容 然后 console 那个 e
|
2
des 2020-04-07 07:41:19 +08:00 via Android
是 e.target 变成了 null 吧?
e 变成 null 我觉得不太可能,建议把 e.target 首先赋值成一个变量 |
3
pyplayer OP @des
@yyss8 e 确实没变 null e.target 变 null 了 后来先把 e.target 赋给 temp 是可以的,不过警告了 arning: This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property `target` on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist(). 查了下 如果在 react 中想异步访问事件属性(如在 setTimeout 内),应该在是处理事件时调用 event.persist(),这会从事件池中移除该合成函数并允许对该合成事件的引用被保留下来 |
5
rodjl 2020-04-07 09:07:40 +08:00 via iPhone
用了 react 吧?调用 e.persist()或者在 await 前用个变量保存 e.target
|
6
zhw2590582 2020-04-07 10:15:00 +08:00 1
react 内部是封装过事件对象的,事件对象是共用的,异步调用的情况下对象可能被释放或者重置,可以在异步之前缓存下 target 就可以了。
|