From dda59469f93ca75cf55d5e0aa865b93739c5ae61 Mon Sep 17 00:00:00 2001 From: Hypnosphi Date: Fri, 11 May 2018 18:04:35 +0300 Subject: [PATCH 1/2] Shallow renderer: pass component instance to setState updater as `this` --- .../src/ReactShallowRenderer.js | 2 +- .../__tests__/ReactShallowRenderer-test.js | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/react-test-renderer/src/ReactShallowRenderer.js b/packages/react-test-renderer/src/ReactShallowRenderer.js index 9cafeeb2f15e2..e17449d79bdf5 100644 --- a/packages/react-test-renderer/src/ReactShallowRenderer.js +++ b/packages/react-test-renderer/src/ReactShallowRenderer.js @@ -298,7 +298,7 @@ class Updater { const currentState = this._renderer._newState || publicInstance.state; if (typeof partialState === 'function') { - partialState = partialState(currentState, publicInstance.props); + partialState = partialState.call(publicInstance, currentState, publicInstance.props); } // Null and undefined are treated as no-ops. diff --git a/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js b/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js index ce62bba280733..c4cdcd6b65eea 100644 --- a/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js +++ b/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js @@ -945,6 +945,27 @@ describe('ReactShallowRenderer', () => { expect(result.props.children).toEqual(2); }); + it('can access component instance from setState updater function', done => { + let instance; + + class SimpleComponent extends React.Component { + state = {}; + + render() { + instance = this; + return null; + } + } + + const shallowRenderer = createRenderer(); + shallowRenderer.render(); + + instance.setState(function updater(state, props) { + expect(this).toBe(instance); + done(); + }); + }); + it('can setState with a callback', () => { let instance; From 3d0f2bec68d9fa8edfd730a27604b25558e87d33 Mon Sep 17 00:00:00 2001 From: Hypnosphi Date: Fri, 11 May 2018 19:42:19 +0300 Subject: [PATCH 2/2] Run prettier --- packages/react-test-renderer/src/ReactShallowRenderer.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/react-test-renderer/src/ReactShallowRenderer.js b/packages/react-test-renderer/src/ReactShallowRenderer.js index e17449d79bdf5..3134f991eeaf2 100644 --- a/packages/react-test-renderer/src/ReactShallowRenderer.js +++ b/packages/react-test-renderer/src/ReactShallowRenderer.js @@ -298,7 +298,11 @@ class Updater { const currentState = this._renderer._newState || publicInstance.state; if (typeof partialState === 'function') { - partialState = partialState.call(publicInstance, currentState, publicInstance.props); + partialState = partialState.call( + publicInstance, + currentState, + publicInstance.props, + ); } // Null and undefined are treated as no-ops.