Привязать метод setCardWidth
к this
в конструкторе:
constructor(props) {
super(props)
this.state = {
cardElWidth: null
}
this.setCardWidth = this.setCardWidth.bind(this)
this.delayedCallback = debounce(this.setCardWidth, 1000)
this.CardEl = React.createRef()
}
или еще короче, связав непосредственно в выражении debounce:
constructor(props) {
super(props)
this.state = {
cardElWidth: null
}
this.delayedCallback = debounce(this.setCardWidth.bind(this), 1000)
this.CardEl = React.createRef()
}
Вместо использования bindв конструкторе вы можете преобразовать setCardWidth
в свойство класса и использовать функцию стрелки для автоматического связывания с this
.
Примечание: для этого требуется плагин babel-proposal-class-properties .
setPlayerCardWidth = () => {
this.setState({
cardElWidth: this.CardEl.current.offsetWidth
})
}
Если вы используете свойства класса, вы также можете удалить конструктор:
class Card extends Component {
state = {
cardElWidth: null
}
CardEl = React.createRef()
componentDidMount() {
this.setCardWidth()
window.addEventListener('resize', this.delayedCallback)
}
componentWillUnmount() {
window.removeEventListener('resize', this.delayedCallback)
}
delayedCallback = debounce(this.setCardWidth, 1000)
setPlayerCardWidth = () => {
this.setState({
cardElWidth: this.CardEl.current.offsetWidth
})
}
}