@@ -47,6 +47,8 @@ export default class SimpleMDEEditor extends React.PureComponent<
4747 SimpleMDEEditorProps ,
4848 SimpleMDEEditorState
4949> {
50+ private elementWrapperRef : any ;
51+
5052 static defaultProps = {
5153 events : { } ,
5254 onChange : noop ,
@@ -91,7 +93,9 @@ export default class SimpleMDEEditor extends React.PureComponent<
9193 }
9294
9395 componentWillUnmount ( ) {
94- this . removeEvents ( ) ;
96+ if ( this . editorEl !== null && this . editorEl !== undefined ) {
97+ this . removeEvents ( ) ;
98+ }
9599 }
96100
97101 createEditor = ( ) => {
@@ -121,16 +125,11 @@ export default class SimpleMDEEditor extends React.PureComponent<
121125 } ;
122126
123127 addEvents = ( ) => {
124- const wrapperId = `${ this . id } -wrapper` ;
125- const wrapperEl = document . getElementById ( `${ wrapperId } ` ) ;
126-
127- this . editorEl = wrapperEl ! . getElementsByClassName ( "CodeMirror" ) [ 0 ] ;
128- this . editorToolbarEl = wrapperEl ! . getElementsByClassName (
129- "editor-toolbar"
130- ) [ 0 ] ;
128+ this . editorEl = this . elementWrapperRef ;
129+ this . editorToolbarEl = this . elementWrapperRef . getElementsByClassName ( "editor-toolbar" ) [ 0 ] ;
131130
132- this . editorEl . addEventListener ( "keyup" , this . eventWrapper ) ;
133- this . editorEl . addEventListener ( "paste" , this . eventWrapper ) ;
131+ this . editorEl ! . addEventListener ( "keyup" , this . eventWrapper ) ;
132+ this . editorEl ! . addEventListener ( "paste" , this . eventWrapper ) ;
134133 this . editorToolbarEl &&
135134 this . editorToolbarEl . addEventListener ( "click" , this . eventWrapper ) ;
136135
@@ -166,6 +165,10 @@ export default class SimpleMDEEditor extends React.PureComponent<
166165 this . simpleMde ! . codemirror . setOption ( "extraKeys" , this . props . extraKeys ) ;
167166 }
168167 } ;
168+
169+ private buildWrapperRef = ( e : any ) => {
170+ this . elementWrapperRef = e ;
171+ } ;
169172
170173 render ( ) {
171174 const {
@@ -182,7 +185,7 @@ export default class SimpleMDEEditor extends React.PureComponent<
182185 ...rest
183186 } = this . props ;
184187 return (
185- < div id = { `${ this . id } -wrapper` } { ...rest } >
188+ < div id = { `${ this . id } -wrapper` } { ...rest } ref = { this . buildWrapperRef } >
186189 { label && < label htmlFor = { this . id } > { label } </ label > }
187190 < textarea id = { this . id } />
188191 </ div >
0 commit comments