Skip to content
This repository was archived by the owner on Sep 28, 2023. It is now read-only.

Commit 0aab064

Browse files
committed
Merge pull request aputinski#7 from matthinz/unmounting-fix
Fix "undefined is not an object" in componentWillUnmount
2 parents 3ec421a + 05e752f commit 0aab064

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

spec/navigation-controller.spec.jsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,24 @@ describe('NavigationController', () => {
7676
expect(controller.__springSystem).to.be.an.instanceof(rebound.SpringSystem);
7777
});
7878
});
79+
describe('#componentWillUnmount', () => {
80+
let spring;
81+
beforeEach(() => {
82+
controller = new NavigationController({ views: views });
83+
controller.componentWillMount();
84+
spring = controller.__spring;
85+
controller.componentWillUnmount();
86+
})
87+
it('cleans up spring system', () => {
88+
expect(controller.__springSystem).to.be.undefined
89+
});
90+
it('cleans up spring', () => {
91+
expect(controller.__spring).to.be.undefined
92+
});
93+
it('removes spring event listeners', () => {
94+
expect(spring.listeners).to.deep.equal([]);
95+
});
96+
});
7997
describe('#componentDidMount', () => {
8098
it('caches the view wrappers', () => {
8199
expect(viewWrapper0).to.be.an.instanceof(HTMLElement);

src/navigation-controller.jsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ class NavigationController extends React.Component {
112112
});
113113
}
114114

115+
componentWillUnmount() {
116+
delete this.__springSystem;
117+
this.__spring.removeAllListeners();
118+
delete this.__spring;
119+
}
120+
115121
componentDidMount() {
116122
// Cache the view wrappers
117123
this['__view-wrapper-0'] = React.findDOMNode(this.refs[`view-wrapper-0`]);
@@ -124,10 +130,6 @@ class NavigationController extends React.Component {
124130
});
125131
}
126132

127-
componentWillUnmount() {
128-
this.__viewSpring.destroy();
129-
}
130-
131133
/**
132134
* Translate the view wrappers by a specified percentage
133135
*

0 commit comments

Comments
 (0)