diff --git a/examples/official-storybook/stories/addon-docs/container-override.stories.mdx b/examples/official-storybook/stories/addon-docs/container-override.stories.mdx
index d02730244613..cefd2c593f8e 100644
--- a/examples/official-storybook/stories/addon-docs/container-override.stories.mdx
+++ b/examples/official-storybook/stories/addon-docs/container-override.stories.mdx
@@ -1,19 +1,38 @@
-import { Meta, DocsContainer, Story } from '@storybook/addon-docs';
+import { useRef } from 'react';
+import { Meta, DocsContainer, Story, ArgsTable } from '@storybook/addon-docs';
(
-
- {children}
-
- ),
+ container: ({ children, context }) => {
+ const countRef = useRef();
+ countRef.current = (countRef.current || 0) + 1;
+ return (
+
+ {children}
+ Container rendered {countRef.current} times
+ Try changing:
+
+ - the arg - story should rerender but container should not
+ - a global (eg theme) - both should rerender
+
+
+ );
+ },
},
}}
/>
+export const Component = () => {
+ const countRef = useRef();
+ countRef.current = (countRef.current || 0) + 1;
+ return
Story rendered {countRef.current} times
;
+};
+
- some content
+
+
+
diff --git a/lib/preview-web/src/DocsRender.ts b/lib/preview-web/src/DocsRender.ts
index d386611584e6..6eabc49f9092 100644
--- a/lib/preview-web/src/DocsRender.ts
+++ b/lib/preview-web/src/DocsRender.ts
@@ -72,12 +72,12 @@ export class DocsRender implements Render {
expect(mockChannel.emit).toHaveBeenCalledWith(STORY_RENDERED, 'component-one--a');
});
- describe('in docs mode', () => {
+ describe('in docs mode, legacy inline render', () => {
+ it('re-renders the docs container', async () => {
+ document.location.search = '?id=component-one--a&viewMode=docs';
+
+ await createAndRenderPreview();
+
+ mockChannel.emit.mockClear();
+ emitter.emit(UPDATE_GLOBALS, { globals: { foo: 'bar' } });
+ await waitForRender();
+
+ expect(ReactDOM.render).toHaveBeenCalledTimes(2);
+ });
+ });
+
+ describe('in docs mode, modern inline render', () => {
+ beforeEach(() => {
+ global.FEATURES.modernInlineRender = true;
+ });
+ afterEach(() => {
+ global.FEATURES.modernInlineRender = false;
+ });
it('re-renders the docs container', async () => {
document.location.search = '?id=component-one--a&viewMode=docs';
@@ -982,7 +1002,7 @@ describe('PreviewWeb', () => {
global.FEATURES.modernInlineRender = true;
});
afterEach(() => {
- global.FEATURES.modernInlineRender = true;
+ global.FEATURES.modernInlineRender = false;
});
it('does not re-render the docs container', async () => {
document.location.search = '?id=component-one--a&viewMode=docs';
diff --git a/lib/preview-web/src/PreviewWeb.tsx b/lib/preview-web/src/PreviewWeb.tsx
index 6c455bd2e93b..891eb1dd5337 100644
--- a/lib/preview-web/src/PreviewWeb.tsx
+++ b/lib/preview-web/src/PreviewWeb.tsx
@@ -212,7 +212,7 @@ export class PreviewWeb extends Preview extends Preview