mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
dd5365878d
## Summary - #26234 is reverted and replaced with a better approach - introduce a new global devtools variable to decouple the global hook's dependency on backend/console.js, and add it to react-devtools-inline and react-devtools-standalone With this PR, I want to introduce a new principle to hook.js: we should always be alert when editing this file and avoid importing from other files. In the past, we try to inline a lot of the implementation because we use `.toString()` to inject this function from the extension (we still have some old comments left). Although it is no longer inlined that way, it has became now more important to keep it clean as it is a de facto global API people are using (9.9K files contains it on Github search as of today). **File size change for extension:** Before: 379K installHook.js After: 21K installHook.js 363K renderer.js
34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
/**
|
|
* In order to support reload-and-profile functionality, the renderer needs to be injected before any other scripts.
|
|
* Since it is a complex file (with imports) we can't just toString() it like we do with the hook itself,
|
|
* So this entry point (one of the web_accessible_resources) provides a way to eagerly inject it.
|
|
* The hook will look for the presence of a global __REACT_DEVTOOLS_ATTACH__ and attach an injected renderer early.
|
|
* The normal case (not a reload-and-profile) will not make use of this entry point though.
|
|
*
|
|
* @flow
|
|
*/
|
|
|
|
import {attach} from 'react-devtools-shared/src/backend/renderer';
|
|
import {SESSION_STORAGE_RELOAD_AND_PROFILE_KEY} from 'react-devtools-shared/src/constants';
|
|
import {sessionStorageGetItem} from 'react-devtools-shared/src/storage';
|
|
|
|
if (
|
|
sessionStorageGetItem(SESSION_STORAGE_RELOAD_AND_PROFILE_KEY) === 'true' &&
|
|
!window.hasOwnProperty('__REACT_DEVTOOLS_ATTACH__')
|
|
) {
|
|
Object.defineProperty(
|
|
window,
|
|
'__REACT_DEVTOOLS_ATTACH__',
|
|
({
|
|
enumerable: false,
|
|
// This property needs to be configurable to allow third-party integrations
|
|
// to attach their own renderer. Note that using third-party integrations
|
|
// is not officially supported. Use at your own risk.
|
|
configurable: true,
|
|
get() {
|
|
return attach;
|
|
},
|
|
}: Object),
|
|
);
|
|
}
|