diff --git a/README.md b/README.md
index 16818c12..efdf090c 100644
--- a/README.md
+++ b/README.md
@@ -95,6 +95,12 @@ ReactDOM.render((
|
additional className added to popup |
+
+ | forceRender |
+ boolean |
+ false |
+ whether render popup before first show |
+
| destroyPopupOnHide |
boolean |
diff --git a/package.json b/package.json
index 0e9bc590..a8708a5e 100644
--- a/package.json
+++ b/package.json
@@ -61,6 +61,6 @@
"prop-types": "15.x",
"rc-align": "2.x",
"rc-animate": "2.x",
- "rc-util": "^4.2.0"
+ "rc-util": "^4.3.0"
}
}
diff --git a/src/index.js b/src/index.js
index 359944f1..5180c364 100644
--- a/src/index.js
+++ b/src/index.js
@@ -40,6 +40,10 @@ if (!IS_REACT_16) {
return instance.state.popupVisible;
},
+ isForceRender(instance) {
+ return instance.props.forceRender;
+ },
+
getContainer(instance) {
return instance.getContainer();
},
@@ -78,6 +82,7 @@ const Trigger = createReactClass({
blurDelay: PropTypes.number,
getPopupContainer: PropTypes.func,
getDocument: PropTypes.func,
+ forceRender: PropTypes.bool,
destroyPopupOnHide: PropTypes.bool,
mask: PropTypes.bool,
maskClosable: PropTypes.bool,
@@ -578,7 +583,7 @@ const Trigger = createReactClass({
let portal;
// prevent unmounting after it's rendered
- if (popupVisible || this._component) {
+ if (popupVisible || this._component || props.forceRender) {
portal = (
{
+ it('doesn\'t render at first time when forceRender=false', () => {
+ const trigger = ReactDOM.render(
+ Hello!}>
+ Hey!
+
+ , div);
+ expect(trigger.getPopupDomNode()).not.to.be.ok();
+ });
+ it('render at first time when forceRender=true', () => {
+ class Test extends React.Component {
+ saveTrigger = (trigger) => this.trigger = trigger;
+ render() {
+ return (
+ Hello!}
+ >
+ Hey!
+
+ );
+ }
+ }
+ const test = ReactDOM.render(, div);
+ expect(test.trigger.getPopupDomNode()).to.be.ok();
+ });
+ });
+
describe('destroyPopupOnHide', () => {
it('defaults to false', () => {
const trigger = ReactDOM.render(