Если я вас правильно понял:
class Avatar extends React.Component {
render() {
const finalClassName = 'avatar ' + (this.props.className || '')
return (
<img className={finalClassName} src={this.props.user.avatarUrl} alt={this.props.user.name} />
);
}
}
class UserInfo extends React.Component {
render() {
return (
<div className="user-info">
<Avatar className="user-info__avatar" user={this.props.user} />
<div className="user-info__name">{this.props.user.name}</div>
</div>
);
}
}
Т.е. просто передавайте className как props компоненту Avatar, затем объединяйте в один классНейм:
// выражение в скобочках нужно, чтобы не получилось 'avatar undefined', когда className не передан.
// Я рекомендую указать className, равное '', в defaultProps компонента Avatar
const finalClassName = 'avatar ' + (this.props.className || '')
Также в npm есть удобный пакет
https://www.npmjs.com/package/classnames , который позволяет формировать строку с классами. Ваш пример выглядел бы так:
const finalClassName = classnames({
'avatar': true,
[this.props.className]: !!this.props.className,
'some-other-class': someCondition
})