Closed proudwax closed 6 years ago
@proudwax а можешь привести прямо пример кода, где не работает?
Проблема в том, что ты прокидываешь пропсы из родительского компонента и onClick
сверху перетирает тот, который уже был в самом компоненте. Никакой магии наследования тут нет, пропсы это просто словарь, и если в нём есть два одинаковых ключа — тот, что появился позже затирает уже существующий.
Чтобы этого избежать нужно явно в дочернем компоненте подготовиться к тому, что родительский компонент захочет указать свой onClick
:
+ onClick={(e) => {
+ // подготовились вызвать родительский обработчик, если есть
+ this.props.onClick && this.props.onClick(e);
+ // делаем всё, что необходимо самому компоненту при клике
+ this.handleFocusOut();
+ }}
Вот и всё «наследование».
@proudwax 👆 , надеюсь, поможет. Успехов!
PS. Счекаутил проект, вроде игру какую-то делаешь. 👍
Есть в bem-components блок button. На сколько я понимаю, при клике на этот блок отрабатывает модификатор
focused
иfocused-hard
. Т.е. модификатор появляется при фокусе и удаляется после клика.Думал реализовать это в react. Компонент Button в нём рендер:
return (<button onFocus={this.handleFocusIn} onBlur={this.handleFocusOut} > <span className='Button-Text'> {this.props.children} </span> </button> );
так вот, если добавить
onClick={this.handleFocusOut}
, и использовать где-нибудь компонент<Button onClick={тут какая-нибудь магия}>Test</Button>
. То клик сhandleFocusOut
не отрабатывает. Может, конечно, я что-то не то делаю. Так вот вопрос, как наследовать event`ы