#javascript #reactjs #react-class-based-component
Вопрос:
У меня действительно большой класс с множеством обработчиков, и документ, который он начинает быть неразборчивым, я хочу определить методы обработчиков за пределами моего класса и сгруппировать в документе по типу (у всех инструментов разные обработчики, поэтому я улавливаю событие и в зависимости от выбранного инструмента перенаправляю его на правильный обработчик), затем импортирую эти методы/функции и вызываю их из другого метода, как обычные методы.
Первый журнал возвращает это правильно, но по какой-то причине журнал изнутри handleSelectorMouseDown возвращает «неопределенный», даже если я использую .bind(это)
Комментарии:
1. Пожалуйста, не показывайте фотографии кода. Включите фактический код в свой вопрос.
2. Вы неправильно используете привязку, вам нужно сначала
bind
, тогдаcall
в вашем случае сценарий будетhandleSelectorMouseDown.bind(this)(e)
, хотя мне не нравится такой подход, я бы создал привязанную ссылку, напримерconst onSelectorMouseDown = handleSelectorMouseDown.bind(this)
, вместо этого, а затем позвонилonSelectorMouseDown(e)
Ответ №1:
Попробуйте это:
handleSelectorMouseDown.bind(this)(e)
Это сначала свяжет импортированную функцию с правильной областью действия, а затем выполнит функцию.
Другой вариант-привязать функцию в конструкторе класса и использовать ее позже:
class MyComponent {
constrctor() {
this.handleSelectorMouseDown = handleSelectorMouseDown.bind(this);
}
}
Теперь вам просто нужно позвонить this.handleSelectorMouseDown(e)
Комментарии:
1. Есть ли какой-нибудь способ сделать это с помощью функций со стрелками?
Ответ №2:
Вы используете bind
неправильно, вам нужно сначала bind
, тогда call
я бы создал ссылку на уровне класса для ваших связанных обработчиков:
constructor() {
this.onSelectorMouseDown = handleSelectorMouseDown.bind(this);
}
тогда вы можете называть их так, как вам нравится:
this.onSelectorMouseDown(e);