Посмотрите на исходный код...
Функция dispatch будет возвращать ссылку на саму async функцию и в await перед dispatch'ем нет ни какого смысла.
Actions must be plain objects. Use custom middleware for async actions.
мы ведь говорим о недостатках родных классов
И кивать на договоренности 20-летней давности относительно языка, написанного для легкого кода в условиях, когда требуются инструменты для написания сложного кода - так себе аргумент.
А если это тот редкий случай, когда пишется действительно сложный фронт?
class SomeComponent extends Component {
}
но вы ведь необходимость интерфейсов в ошибку проектирования не станете записывать? Или станете?
использование интерфейсов
использование приватных свойств
множественное наследование
class PrivateRoute extends React.Component {
render() {
const { isAuthenticated, component: Component, ...rest } = this.props;
return (
<Route {...rest} render={(Rouprops) => (
isAuthenticated === true
? <Component {...props} />
: <Redirect to='/login' />
)} />
);
}
}
const mapStateToProps = state => ({
isAuthenticated: state.user.isAuthenticated,
});
export default connect(mapStateToProps)(PrivateRoute);
gulp - таск менеджер
webpack - сборщик модулей
Во-первых это стандарт в react разработке. Во-вторых возможности очень гибкой настройки бандлинга. В-третьих HMR.