Ответ 1
Команда Facebook рекомендует использовать "идиоматические концепции JavaScript" при написании кода React, и поскольку для классов ES6 нет поддержки mixin, нужно просто использовать композицию (поскольку вы просто используете идиоматические функции Javascript).
В этом случае вы можете иметь функцию composeModal
, которая принимает компонент и возвращает его, завернутую в компонент контейнера более высокого порядка. Этот компонент более высокого порядка будет содержать любую логику, состояние и реквизит, которые вы хотите передать всем своим дочерним элементам.
export default function composeModal(Component){
class Modal extends React.Component {
constructor(props){
super(props)
this.state = {/* inital state */}
}
render() {
// here you can pass down whatever you want 'inherited' by the child
return <Component {...this.props} {..this.state}/>
}
}
Modal.propTypes = {
// Re-used propTypes
...
};
return Modal
}
Затем вы можете использовать композиционную функцию следующим образом:
import composeModal from './composeModal';
class RobotRetroComponent extends React.Component {
constructor(props) {
super(props);
this.displayName = 'Retro Robot';
// Load model here and set geometry & material
...
}
render(){
return /* Your JSX here */
}
}
export default composeModal(RobotRetroComponent);