Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6e44cde

Browse files
kpdeckertimneutkens
authored andcommitted
Expose mechanism to monitor render events (vercel#2655)
* Allow custom clientBootstrap entrypoint This allows for customization of the client global bootstrap. * Expose render event emitter to client * Include client entry point in npm package
1 parent 1e15105 commit 6e44cde

File tree

4 files changed

+9
-10
lines changed

4 files changed

+9
-10
lines changed

‎client.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./dist/client/index')

‎client/index.js

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ let ErrorDebugComponent
5656
let Component
5757
let stripAnsi = (s) => s
5858

59+
export const emitter = new EventEmitter()
60+
5961
export default async ({ ErrorDebugComponent: passedDebugComponent, stripAnsi: passedStripAnsi } = {}) => {
6062
// Wait for all the dynamic chunks to get loaded
6163
for (const chunkName of chunks) {
@@ -80,8 +82,6 @@ export default async ({ ErrorDebugComponent: passedDebugComponent, stripAnsi: pa
8082
err
8183
})
8284

83-
const emitter = new EventEmitter()
84-
8585
router.subscribe(({ Component, props, hash, err }) => {
8686
render({ Component, props, err, hash, emitter })
8787
})
@@ -132,7 +132,7 @@ export async function renderError (error) {
132132
}
133133
}
134134

135-
async function doRender ({ Component, props, hash, err, emitter }) {
135+
async function doRender ({ Component, props, hash, err, emitter: emitterProp=emitter }) {
136136
if (!props && Component &&
137137
Component !== ErrorComponent &&
138138
lastAppProps.Component === ErrorComponent) {
@@ -141,24 +141,20 @@ async function doRender ({ Component, props, hash, err, emitter }) {
141141
props = await loadGetInitialProps(Component, { err, pathname, query, asPath })
142142
}
143143

144-
if (emitter) {
145-
emitter.emit('before-reactdom-render', { Component, ErrorComponent })
146-
}
147-
148144
Component = Component || lastAppProps.Component
149145
props = props || lastAppProps.props
150146

151147
const appProps = { Component, props, hash, err, router, headManager }
152148
// lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.
153149
lastAppProps = appProps
154150

151+
emitterProp.emit('before-reactdom-render', { Component, ErrorComponent, appProps })
152+
155153
// We need to clear any existing runtime error messages
156154
ReactDOM.unmountComponentAtNode(errorContainer)
157155
renderReactElement(createElement(App, appProps), appContainer)
158156

159-
if (emitter) {
160-
emitter.emit('after-reactdom-render', { Component, ErrorComponent })
161-
}
157+
emitterProp.emit('after-reactdom-render', { Component, ErrorComponent, appProps })
162158
}
163159

164160
let isInitialRender = true

‎package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"files": [
1111
"dist",
1212
"babel.js",
13+
"client.js",
1314
"link.js",
1415
"css.js",
1516
"head.js",

‎server/build/webpack.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export default async function createCompiler (dir, { buildId, dev = false, quiet
4343
const entries = {
4444
'main.js': [
4545
...defaultEntries,
46+
...config.clientBootstrap || [],
4647
mainJS
4748
]
4849
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /