Отреагировать функция стрелки JavaScript без стрелок?
Я не понимаю, как это может работать в JavaScript
renderMarkButton(type, icon) {
это похоже на функцию стрелки, но без стрелок. Вот контекст:
class HoverMenu extends React.Component {
renderMarkButton(type, icon) {
const { editor } = this.props
return (
<div className="editorButton"
onMouseDown={event => this.onClickMark(event, type)}>
<FontAwesomeIcon color="#666" active={isActive}
className="editorButton" icon={icon} />
</div>
)
}
render() {
return (
<div>
{this.renderMarkButton('bold', {...faBold})}
</div>
)
}
}
Я также смущен
const { editor } = this.props
я полагаю, это исходит от сланца. Я ожидал, что this.props будет {type, icon} в этом случае.
3 ответа
Методы Arrow и bound полезны для передачи их в качестве обратных вызовов, которые будут вызваны позже:
<Component onClick={this.clickHandler}/>
Это не так для renderMarkButton
потому что он называется в месте, где он используется с правильным this
контекст:
this.renderMarkButton('bold', {...faBold})
renderMarkButton
является методом-прототипом класса. Он не работает как функция стрелки, потому что он не связан с контекстом. Вызов его с неверным контекстом приведет к ошибке, потому что не будет this.props
объект:
const unboundFunction = this.renderMarkButton;
unboundFunction('bold', {...faBold});
По поводу ваших вопросов:
renderMarkButton(type, icon) {
это просто синтаксис класса es6: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classesconst { editor } = this.props
называется "деструкция". Вы можете прочитать об этом здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
надеюсь, это поможет:)
Это специальный синтаксис в соответствии с новым class
Ключевое слово, которое позволит вам создавать классы.
По сути, это методы этого конкретного класса, и вы не можете определить какой-либо другой метод за пределами класса, используя этот определенный синтаксис.
Для получения дополнительной информации, рассмотрите MDN как вашего лучшего партнера.