#reactjs #dom #undefined #ref #refs
#reactjs #dom #не определено #ссылка #ссылки
Вопрос:
Я работаю над проектом, который использует «react-notification-оповещение» от creativetim. В своем документе они показывают пример использования своего оповещения. В основном это работает с this.ref, но я знаю, что он устарел, поэтому я попытался заменить его с помощью createRef(), как показано ниже:
class App extends Component {
constructor(props);
this.notifRef = React.createRef();
myFunc(){
this.notifRef.current.notify.notificationAlert(options);
}
render() {
return (
<div>
<NotificationAlert ref={this.notifRef} />
<button onClick={() => this.myFunc()}>Hey</button>
</div>
);
}
}
Но проблема в том, что консоль показывает мне
Не удается прочитать свойство ‘notificationAlert’ для undefined
Я перепробовал много решений и видел много ответов в stack, но мне трудно понять, как это может работать.
Спасибо за вашу помощь!
Ответ №1:
Основное различие между строковыми константами и createRef заключается в том, что createRef хранит данные в current
поле, поскольку строковая константа хранит их в this.refs[stringConstant].
Таким образом, ваш код может быть:
class App extends Component {
constructor(props) {
this.notifRef = React.createRef();
}
myFunc(){
this.notifRef.current.notificationAlert(options);
}
render() {
return (
<div>
<NotificationAlert ref={this.notifRef} />
<button onClick={() => this.myFunc()}>Hey</button>
</div>
);
}
}
Комментарии:
1. Приятно, большое спасибо за ваше объяснение, Никита. Теперь это работает корректно! Теперь я лучше понимаю 🙂
Ответ №2:
Попробуйте это:
class App extends Component {
constructor(props){
super();
this.myFunc = this.myFunc.bind( this );
}
myFunc(){
this.notifRef.current.notify.notificationAlert(options);
}
render() {
return (
<div>
<NotificationAlert ref={ e=> this.notifRef = e } />
<button onClick={ this.myFunc }>Hey</button>
</div>
);
}
}