{this.props.user && <SelfProfileComponent/>}
{this.props.user && this.props.user.rating > 50 && <MegaFunnyBlock/>}
<div class="col-md-3"><div class="my_style">...</div></div>
SELECT products.*, (SELECT COUNT(logOfSales.id) FROM logOfSales WHERE products.id = logOfSales.product_id AND created_at = ?curDay) as countDay, (SELECT COUNT(logOfSales.id) FROM logOfSales WHERE products.id = logOfSales.product_id AND created_at = ?curMonth) as countMonth FROM products WHERE products.id = 1 AND countMonth < products.limit_month AND countDay < products.limit_day
io.use(function(socket, next) {
sessionMiddleware(socket.request, {}, next);
});
io.use(function(socket, next) {
passport.initialize()(socket.request, {}, next);
});
io.use(function(socket, next) {
passport.session()(socket.request, {}, next);
});
2. Да, методы жизненного цикла можно оставлять, serser-side часть использует только некоторые из них, например componentDidMount не вызывается при рендере с сервера, так же и не отрабатываются любые события клика итд, все это навешивает реакт уже на клиент-стороне (поэтому важно чтобы сервер отдал то, что ожидает клиент, это экономит ресурсы, реакт просто подхватывает данные).
3. На реакт 16 еще не переехал, но из того что я понял hydrate протолкнет данные сервера (контекст) в наше локальное состояние (по примеру как мы выталкиваем данные редакса), например сейчас получается как-то так, сервер отрендерил, клиент загрузил, глобальный стейт редакса подхвачен, а локальный нет (контекст который мы передали с сервера уже недоступен) и приходится немного мудрить с редаксом, как-то передавать состояние, чтобы не повторять запросы с клиента, hydrate насколько я понял решает проблему, но нужно поковыряться.
Просто попробуйте и понимание придет достаточно быстро, тем более там не много кода и все очень быстро и легко переделывается в случае чего.