@samitouri / QOS-React / commits / caa01d498d

Fix renderSubtreeIntoContainer with non-context-provider parent (#8399)

Ben Alpert committed Nov 23, 2016 at 14:23 UTC caa01d498d943f974ea216bfe31ad45bb86982c5
2 files changed +24 -1
src/addons/__tests__/renderSubtreeIntoContainer-test.js
+19
@@ -196,4 +196,23 @@ describe('renderSubtreeIntoContainer', () => {
196 expect(portal.firstChild.innerHTML).toBe('changed-changed');
197 });
198
199 + it('should render portal with non-context-provider parent', () => {
200 + var container = document.createElement('div');
201 + document.body.appendChild(container);
202 + var portal = document.createElement('div');
203 +
204 + class Parent extends React.Component {
205 + render() {
206 + return null;
207 + }
208 +
209 + componentDidMount() {
210 + renderSubtreeIntoContainer(this, <div>hello</div>, portal);
211 + }
212 + }
213 +
214 + ReactDOM.render(<Parent bar="initial" />, container);
215 + expect(portal.firstChild.innerHTML).toBe('hello');
216 + });
217 +
218 });
src/renderers/shared/fiber/ReactFiberReconciler.js
+5 -1
@@ -19,6 +19,7 @@ import type { PriorityLevel } from 'ReactPriorityLevel';
19
20 var {
21 findCurrentUnmaskedContext,
22 + isContextProvider,
23 processChildContext,
24 } = require('ReactFiberContext');
25 var { createFiberRoot } = require('ReactFiberRoot');
@@ -91,7 +92,10 @@ export type Reconciler<C, I, TI> = {
92 };
93
94 getContextForSubtree._injectFiber(function(fiber : Fiber) {
94 - return processChildContext(fiber, findCurrentUnmaskedContext(fiber));
95 + const parentContext = findCurrentUnmaskedContext(fiber);
96 + return isContextProvider(fiber) ?
97 + processChildContext(fiber, parentContext) :
98 + parentContext;
99 });
100
101 module.exports = function<T, P, I, TI, C>(config : HostConfig<T, P, I, TI, C>) : Reconciler<C, I, TI> {