首页 >> 大全

React hooks新提案 useEvent

2024-01-07 大全 35 作者:考证青年

静待秋风

吹拂眉梢

---------写下便是永恒

2022 年 5 月 5 日,一个新的hook提案:。

其目的是返回一个永远引用不变(-)的事件处理函数

没有 时我们如何写事件函数

const [text, setText] = useState("");const onClick = () => {sendMessage(text);};return <SendButton onClick={onClick} />;
}

为了访问最新的 state,在每次chat组件更新时,都会声明一个新的函数(引用变化)

React 比较两个组件要diff 前,会对props 进行浅比较

同时它还会破坏你的 memo 优化

const SendButton = React.memo(() => {});

优化:

function Chat() {const [text, setText] = useState("");const onClick = useCallback(() => {sendMessage(text);}, [text]);return <SendButton onClick={onClick} />;
}

当text变化时,引用还是会改变,依然会带来子组件没必要的更新。。。

function Chat() {const [text, setText] = useState("");const onClick = useEvent(() => {sendMessage(text);});return <SendButton onClick={onClick} />;
}

已经一直是引用不变的了,而且可以访问到最新的 text。

function useEvent(handler) {const handlerRef = useRef(null);// In a real implementation, this would run before layout effectsuseLayoutEffect(() => {handlerRef.current = handler;});return useCallback((...args) => {// In a real implementation, this would throw if called during renderconst fn = handlerRef.current;return fn(...args);}, []);
}

最核心的地方就是使用 维持最新引用以及缓存住外层的

不可避免的需要改动 fiber tree 阶段逻辑

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了