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(