How to create a React Modal(which is append to `lt;bodygt;`) with transitions?(如何创建带有转换的 React 模态(附加到`lt;bodygt;`)?)
问题描述
这个答案中有一个模式 https://stackoverflow.com/a/26789089/883571 正在创建通过将其附加到 <body>
的基于 React 的 Modal.但是,我发现它与 React 提供的过渡插件不兼容.
There is a modal in this answer https://stackoverflow.com/a/26789089/883571 which is creating a React-based Modal by appending it to <body>
. However, I found it not compatible with the transition addons provided by React.
如何创建一个带过渡的(进入和离开时)?
How to create one with transitions(during enter and leave)?
推荐答案
在 react conf 2015 上,Ryan Florence 展示了使用门户.以下是创建简单 Portal
组件的方法...
At react conf 2015, Ryan Florence demonstrated using portals. Here's how you can create a simple Portal
component...
var Portal = React.createClass({
render: () => null,
portalElement: null,
componentDidMount() {
var p = this.props.portalId && document.getElementById(this.props.portalId);
if (!p) {
var p = document.createElement('div');
p.id = this.props.portalId;
document.body.appendChild(p);
}
this.portalElement = p;
this.componentDidUpdate();
},
componentWillUnmount() {
document.body.removeChild(this.portalElement);
},
componentDidUpdate() {
React.render(<div {...this.props}>{this.props.children}</div>, this.portalElement);
}
});
然后,您通常可以在 React 中执行的所有操作都可以在门户内部执行...
and then everything you can normally do in React you can do inside of the portal...
<Portal className="DialogGroup">
<ReactCSSTransitionGroup transitionName="Dialog-anim">
{ activeDialog === 1 &&
<div key="0" className="Dialog">
This is an animated dialog
</div> }
</ReactCSSTransitionGroup>
</Portal>
jsbin 演示
你也可以看看 Ryan 的 react-modal,虽然我实际上没有使用它,所以我不知道它与动画效果如何.
jsbin demo
You can also have a look at Ryan's react-modal, although I haven't actually used it so I don't know how well it works with animation.
这篇关于如何创建带有转换的 React 模态(附加到`<body>`)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何创建带有转换的 React 模态(附加到`<body>`)?
基础教程推荐
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- 直接将值设置为滑块 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01