Skip to content

Commit 9665119

Browse files
roderickhsiaoyenshih
authored andcommitted
Support onLoad and onError on <link> (facebook#11825)
* Support link event on Fiber component * Update unit test * prettier format * Update test description * Update ReactDOMComponent-test.js
1 parent faa1f40 commit 9665119

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

packages/react-dom/src/__tests__/ReactDOMComponent-test.js

+36
Original file line numberDiff line numberDiff line change
@@ -1310,6 +1310,42 @@ describe('ReactDOMComponent', () => {
13101310
expect(console.log.calls.argsFor(1)[0]).toContain('onLoad called');
13111311
}
13121312
});
1313+
1314+
it('should receive a load event on <link> elements', () => {
1315+
const container = document.createElement('div');
1316+
const onLoad = jest.fn();
1317+
1318+
ReactDOM.render(
1319+
<link href="http://example.org/link" onLoad={onLoad} />,
1320+
container,
1321+
);
1322+
1323+
const loadEvent = document.createEvent('Event');
1324+
const link = container.getElementsByTagName('link')[0];
1325+
1326+
loadEvent.initEvent('load', false, false);
1327+
link.dispatchEvent(loadEvent);
1328+
1329+
expect(onLoad).toHaveBeenCalledTimes(1);
1330+
});
1331+
1332+
it('should receive an error event on <link> elements', () => {
1333+
const container = document.createElement('div');
1334+
const onError = jest.fn();
1335+
1336+
ReactDOM.render(
1337+
<link href="http://example.org/link" onError={onError} />,
1338+
container,
1339+
);
1340+
1341+
const errorEvent = document.createEvent('Event');
1342+
const link = container.getElementsByTagName('link')[0];
1343+
1344+
errorEvent.initEvent('error', false, false);
1345+
link.dispatchEvent(errorEvent);
1346+
1347+
expect(onError).toHaveBeenCalledTimes(1);
1348+
});
13131349
});
13141350

13151351
describe('updateComponent', () => {

packages/react-dom/src/client/ReactDOMFiberComponent.js

+2
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ export function setInitialProperties(
485485
break;
486486
case 'img':
487487
case 'image':
488+
case 'link':
488489
trapBubbledEvent('topError', 'error', domElement);
489490
trapBubbledEvent('topLoad', 'load', domElement);
490491
props = rawProps;
@@ -870,6 +871,7 @@ export function diffHydratedProperties(
870871
break;
871872
case 'img':
872873
case 'image':
874+
case 'link':
873875
trapBubbledEvent('topError', 'error', domElement);
874876
trapBubbledEvent('topLoad', 'load', domElement);
875877
break;

0 commit comments

Comments
 (0)