-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Description
According to this line a react component will only mount if the innerHTML
is empty.
// javascript/webpacker_react-npm-module/src/index.js:72
if (node.innerHTML.length === 0) this.render(node, component)
This works well for initial page loads that are not rendered via the Turbolinks cache, but components will not re-mount after navigating around an app that utilize Turbolinks caching. This can be replicated with the following steps:
- Use
react_component
onpage one
which mount's just fine. - Click link to visit
page two
.page one
's html is cached, the component is unmounted andpage two
is rendered. - Click the back button,
page one
is rendered from the Turbolinks cache and the component will not be re-mounted as the components innerHTML is not empty
This is not noticeable for simple components that render static text, but becomes immediately apparent if a component that changes state over time (showing the current time, polling for new data, etc.).
Is there a reason for ensuring innerHTML
is empty before mounting a component? Or perhaps the components should be un-mounted on turbolinks:before-cache
to avoid being cached all together?
guigs, stevehanson and gabdorf
Metadata
Metadata
Assignees
Labels
No labels