diff --git a/examples/index.tsx b/examples/index.tsx
index 7d2d703..e9dae55 100644
--- a/examples/index.tsx
+++ b/examples/index.tsx
@@ -168,3 +168,18 @@ render(
,
document.getElementById('root'),
);
+
+setInterval(() => {
+ render(
+
+
+
+
+
+
+
+
+ ,
+ document.getElementById('root'),
+ )
+}, 1000)
\ No newline at end of file
diff --git a/lib/ViewportProvider.tsx b/lib/ViewportProvider.tsx
index 978ca3a..3aa9f20 100644
--- a/lib/ViewportProvider.tsx
+++ b/lib/ViewportProvider.tsx
@@ -31,11 +31,11 @@ const getCurrentDefaultViewport = (): IViewport => {
};
export const ViewportContext = React.createContext({
- removeViewportChangeListener: (handler: TViewportChangeHandler) => {},
+ removeViewportChangeListener: (handler: TViewportChangeHandler) => { },
addViewportChangeListener: (
handler: TViewportChangeHandler,
options: IViewportChangeOptions,
- ) => {},
+ ) => { },
getCurrentViewport: getCurrentDefaultViewport,
hasRootProviderAsParent: false,
version: '__VERSION__',
@@ -78,7 +78,7 @@ const shouldSkipIteration = (
export default class ViewportProvider extends React.PureComponent<
IProps,
{ hasListeners: boolean }
-> {
+ > {
static defaultProps: {
experimentalSchedulerEnabled: false;
};
@@ -190,35 +190,36 @@ export default class ViewportProvider extends React.PureComponent<
}, 0);
}
+ private collector = React.createRef();
+ private contextValue = {
+ addViewportChangeListener: this.addViewportChangeListener,
+ removeViewportChangeListener: this.removeViewportChangeListener,
+ getCurrentViewport: () => {
+ if (!this.collector.current) {
+ return getCurrentDefaultViewport();
+ }
+ return this.collector.current.getPropsFromState();
+ },
+ hasRootProviderAsParent: true,
+ version: '__VERSION__',
+ };
+
renderChildren = (props: { hasRootProviderAsParent: boolean }) => {
if (props.hasRootProviderAsParent) {
return this.props.children;
}
- const collector = React.createRef();
- const value = {
- addViewportChangeListener: this.addViewportChangeListener,
- removeViewportChangeListener: this.removeViewportChangeListener,
- getCurrentViewport: () => {
- if (!collector.current) {
- return getCurrentDefaultViewport();
- }
- return collector.current.getPropsFromState();
- },
- hasRootProviderAsParent: true,
- version: '__VERSION__',
- };
return (
{this.state.hasListeners && (
this.triggerUpdateToListeners(state, updates, { isIdle: true })
}
/>
)}
-
+
{this.props.children}