您的位置:首页 > 财经 > 产业 > React 中的事件处理

React 中的事件处理

2024/10/6 14:27:56 来源:https://blog.csdn.net/hawk2014bj/article/details/139725788  浏览:    关键词:React 中的事件处理

React 中是如何处理事件的,现在下面简单的一段代码:

export default function App() {const AList = lazy(()=>import('./List.js'))const r = useRef(null)  const [show, setShow] = useState(false);return (<><button onFocus={()=>{setShow(!show)}} >加载组件</button>{show ? <Suspense fallback="loading"><AList items={[{id:1, text:"123"}]}>asdf</AList></Suspense>:""}</>);
}

代码为 Button 绑定了 onFocus 事件,这里用 onFocus 是为了方便 debug。如果做一个框架要接管所有的事件处理,我们想一下应该如何处理,可以通过代理的方式,把所有可以监听到的事件交给代理去处理,最后在交给框架组件上绑定的对应事件进行处理。由于 JS 是冒泡事件模型,所有事件都会向上传递,只要监听最顶层容器就可以监听到所有事件,当点击发生的时候调用目标组件绑定的事件。

在这里插入图片描述
我们看一下,React 中怎么处理的。

组件注册事件

创建 Element,添加 props,这个 props 中就是 Focus 方法,将最终方法于 Element 绑定并包存在 Fiber 上。
在这里插入图片描述
绑定代码
在这里插入图片描述

Root 代理所有事件

创建 Root 时会监听所有事件:
在这里插入图片描述
方法中 loop 所有 Html 原生事件

在这里插入图片描述

事件触发

Focus 事件触发时,会执行 dispatchDiscreteEvent 方法,这个方法在 Root 代理监听时进行的绑定。
在这里插入图片描述
获取组件事件处理方法,这个方法在组件创建时进行的绑定。
在这里插入图片描述

总结

React 事件机制是一个代理模式,所有处理都由根组件监听并进行分发处理。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com