Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Commit f915315

Browse files
committed
Use callback-style refs
1 parent 9e732f1 commit f915315

2 files changed

Lines changed: 7 additions & 5 deletions

File tree

lib/Autocomplete.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ let Autocomplete = React.createClass({
148148
},
149149

150150
componentWillMount() {
151+
// this.refs is frozen, so we need to assign a new object to it
152+
this.refs = {}
151153
this._ignoreBlur = false
152154
this._performAutoCompleteOnUpdate = false
153155
this._performAutoCompleteOnKeyUp = false
@@ -376,7 +378,7 @@ let Autocomplete = React.createClass({
376378
onMouseDown: () => this.setIgnoreBlur(true), // Ignore blur to prevent menu from de-rendering before we can process click
377379
onMouseEnter: () => this.highlightItemFromMouse(index),
378380
onClick: () => this.selectItemFromMouse(item),
379-
ref: `item-${index}`,
381+
ref: e => this.refs[`item-${index}`] = e,
380382
})
381383
})
382384
const style = {
@@ -385,7 +387,7 @@ let Autocomplete = React.createClass({
385387
minWidth: this.state.menuWidth,
386388
}
387389
const menu = this.props.renderMenu(items, this.props.value, style)
388-
return React.cloneElement(menu, { ref: 'menu' })
390+
return React.cloneElement(menu, { ref: e => this.refs.menu = e })
389391
},
390392

391393
handleInputBlur() {
@@ -452,7 +454,7 @@ let Autocomplete = React.createClass({
452454
aria-autocomplete="list"
453455
aria-expanded={open}
454456
autoComplete="off"
455-
ref="input"
457+
ref={e => this.refs.input = e}
456458
onFocus={this.composeEventHandlers(this.handleInputFocus, inputProps.onFocus)}
457459
onBlur={this.composeEventHandlers(this.handleInputBlur, inputProps.onBlur)}
458460
onChange={this.handleChange}

lib/__tests__/Autocomplete-test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ describe('Autocomplete acceptance tests', () => {
5656
autocompleteInputWrapper.simulate('blur')
5757

5858
expect(autocompleteWrapper.state('isOpen')).toBe(false)
59-
expect(autocompleteWrapper.instance().refs.menu).toBe(undefined)
59+
expect(autocompleteWrapper.instance().refs.menu).toBe(null)
6060

6161
})
6262

@@ -390,7 +390,7 @@ describe('Autocomplete#renderMenu', () => {
390390
//autocompleteInputWrapper.simulate('change', { target: { value: 'Ar' } })
391391
const autocompleteMenu = autocompleteWrapper.instance().renderMenu()
392392
expect(autocompleteMenu.type).toEqual('div')
393-
expect(autocompleteMenu.ref).toEqual('menu')
393+
expect(typeof autocompleteMenu.ref).toEqual('function')
394394
expect(autocompleteMenu.props.children.length).toEqual(50)
395395
})
396396

0 commit comments

Comments
 (0)