react bootstrap 模态框动画消失的调试
本文将讨论一个使用 react bootstrap 构建模态框组件时遇到的问题:关闭动画缺失。问题源于一个基于 react hooks 封装的消息框组件,该组件在关闭时没有呈现预期的动画效果。
问题代码如下:
import react from "react";import { usestate, createcontext, useref } from "react";import { button, modal } from "react-bootstrap";function usemessagebox() { let [title, settitle] = usestate(''); let [message, setmessage] = usestate(''); let [buttons, setbuttons] = usestate(null); let [showdialog, setshowdialog] = usestate(false); let resolveref = useref(null); const handleresult = (result) => { console.log(result); resolveref.current(result); setshowdialog(false); }; const messagebox = () => { return ( {title} {message} {buttons} ); }; const show = (title, message, type) => { settitle(title); setmessage(message); if (type === 'ok') { setbuttons( ); } else if (type === 'yesno') { setbuttons( > ) } setshowdialog(true); return new promise((resolve, reject) => { resolveref.current = resolve; }); }; return [messagebox, show];}export default usemessagebox;
调用代码:
function app() { const [messagebox, show] = usemessagebox(); return ( 123
);}
问题在于 messagebox 组件的渲染方式。原始代码中,messagebox 组件在 app 组件中被渲染为一个普通的子组件。 react bootstrap 的 modal 组件依赖于 react 的状态更新机制来触发动画。由于 messagebox 组件在每次状态改变时都会重新渲染,但组件本身并没有重新挂载,因此动画效果无法正常显示。
解决方案是将 messagebox 组件的渲染方式修改为如下:
修改后的 messagebox_hook.js 代码:
const messagebox = usememo(() => { return ( {title} {message} {buttons} );});
修改后的 app.js 代码:
return ();123
{MessageBox}
通过使用 usememo hook,messagebox 组件仅在 showdialog, title, message 或 buttons 发生变化时才会重新渲染,避免了不必要的重新渲染,从而确保 react bootstrap 的 modal 组件可以正确地执行动画。 将 messagebox 直接作为 jsx 元素渲染到页面上,而不是作为一个组件来渲染,也是解决问题的关键。
以上就是React Bootstrap模态框动画消失:如何解决自定义Hook封装的消息框组件动画失效问题?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1502907.html
微信扫一扫
支付宝扫一扫