Merge pull request #5561 from graue/setstate-cwm

shallow render: fix setState in componentWillMount
(cherry picked from commit 8557cc0d67)
This commit is contained in:
Scott Feeney
2016-01-28 11:19:53 -08:00
parent 3285d83440
commit 49617c3be7
2 changed files with 22 additions and 3 deletions
+7 -3
View File
@@ -423,11 +423,15 @@ ReactShallowRenderer.prototype.render = function(element, context) {
if (!context) {
context = emptyObject;
}
var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(false);
this._render(element, transaction, context);
ReactUpdates.ReactReconcileTransaction.release(transaction);
ReactUpdates.batchedUpdates(_batchedRender, this, element, context);
};
function _batchedRender(renderer, element, context) {
var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(false);
renderer._render(element, transaction, context);
ReactUpdates.ReactReconcileTransaction.release(transaction);
}
ReactShallowRenderer.prototype.unmount = function() {
if (this._instance) {
this._instance.unmountComponent();
+15
View File
@@ -201,6 +201,21 @@ describe('ReactTestUtils', function() {
expect(result.props.className).toEqual('clicked');
});
it('can setState in componentWillMount when shallow rendering', function() {
var SimpleComponent = React.createClass({
componentWillMount() {
this.setState({groovy: 'doovy'});
},
render() {
return <div>{this.state.groovy}</div>;
},
});
var shallowRenderer = ReactTestUtils.createRenderer();
var result = shallowRenderer.render(<SimpleComponent />);
expect(result).toEqual(<div>doovy</div>);
});
it('can pass context when shallowly rendering', function() {
var SimpleComponent = React.createClass({
contextTypes: {