Я хочу, чтобы мой компонент Button обрабатывал только события onClick
, если функция обратного вызова передана компоненту. У меня есть два подхода к этому, но я не знаю, какой подход лучше.
Подход 1 - Связать handleClick
с this.handleClick
или false
в конструкторе и передать handleClick
в onClick
в методе рендеринга.
class Button extends Component {
static propTypes = {
children: PropTypes.element.isRequired,
onClick: PropTypes.func
};
static defaultProps = {
onClick: undefined
};
constructor(props) {
super(props);
this.handleClick = (props.onClick) && this.handleClick.bind(this);
}
handleClick() {
const { onClick } = this.props;
onClick();
}
render() {
const { children } = this.props;
return (
<Wrapper onClick={this.handleClick}> // False if onClick is undefined
{children}
</Wrapper>
);
}
}
Подход 2 - связать handleClick
в конструкторе и передать handleClick
или false
в методе рендеринга.
class Button extends Component {
static propTypes = {
children: PropTypes.element.isRequired,
onClick: PropTypes.func
};
static defaultProps = {
onClick: undefined
};
constructor() {
super();
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
const { onClick } = this.props;
onClick();
}
render() {
const { children, onClick } = this.props;
return (
<Wrapper onClick={(onClick) && this.handleClick}>
{children}
</Wrapper>
);
}
}