Местоположение
Россия, Москва и Московская обл., Москва

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (63)

Лучшие ответы пользователя

Все ответы (181)
  • Полноценный пример SSR для react/redux?

    Да состояние собирается на сервере для каждого клиента (request'a), скажем на уровне мидлвара мы собираем состояние (текущего авторизованного пользователя, какие-то другие глобальные данные), далее отрабатывает обработчик маршрута, мы получили данные какой-то страницы из бд и передали их как контекст, примерно так:
    import React from 'react';
    import { StaticRouter } from 'react-router'
    import { Provider } from 'react-redux'
    import ReactDOMServer from 'react-dom/server';
    
    import App from './client/components/App.jsx'
    
    ReactDOMServer.renderToString(
    	<Provider store={ReduxStore}>
    		<StaticRouter
    			location={Url}
    			context={Context}>
    			<App/>
    		</StaticRouter>
    	</Provider>
    );

    Где, ReduxStore сгенерированное нами глобальное состояние (redux) запроса, Url запрошенный урл, Context контекст (будет передано как this.props.staticContext в компонент). Реакт вытянет нужный контейнер роута (по вашим маршрутам в App) и передаст ему контекст, компонент рендерится исходя из полученных данных. Результатом работы метода renderToString будет html строка (размеченная реактом), которую мы шаблонизатором или как угодно впиливаем в блок моунта компонента (в верстке), дополнительно в шаблонизатор передаем сгенерированное состояние, в документации выглядит вот так:
    window.__PRELOADED_STATE__ = JSON.stringify(preloadedState || {}).replace(/</g, '\\u003c')

    Теперь что происходит после того как страница загрузилась и подхватились клиент-скрипты? Все просто мы подхватываем состояние из window.__PRELOADED_STATE__ и вообщем-то все, глобальное состояние передано, компонент уже отрендерен, стоит учитывать что результаты при клиент-рендере и при сервер-рендере должны быть всегда одинаковыми, так же не использовать методы доступные браузеру, но не доступные серверу (на уровне моунта и первого рендера) и хорошенько следить за своим кодом в плане памяти, иначе при какой-либо утечке, память на сервере не будет вычищаться после каждого рендера.
    ---
    Как-то так, надеюсь помог, хотя там еще довольно много заковык
    Ответ написан
    20 комментариев
  • Что за фигня с приравниванием в js?

    Все нормально, просто объекты передаются ссылками, вам нужно создавать новый объект, если хотите управлять им независимо.

    Например:
    let anotherObj = Object.assign({}, obj)

    Или более продвинутые методы отсюда underscorejs.org или его форка https://lodash.com/docs/4.17.4 (рекомендую), в последнем есть и рекурсивный merge может быть полезным, так же стоит помнить что assing не работает в IE 10-11
    Ответ написан
    8 комментариев
  • Как спроектировать грамотно SQL базу данных?

    Одна таблица для всех дел, всех юзеров, 1 млн. записей смешные цифры =)
    Ответ написан
    9 комментариев
  • Стал работать по часам и обнаружил, что выходит 6 часов в день. Это нормально?

    Не понимаю как можно писать код 8 часов, вы там новый яндекс каждый день пишите?) 8 часов именно кода, там куча строк на выхлопе, 2-3 часа в день на код, остальное время на оформление тасков и подбор решения, чтобы в 2-3 часа кодинга ни на что не отвлекаться
    Ответ написан
    1 комментарий
  • Какой способ кэширования лучше?

    Встал вопрос - какой способ кэширования данных быстрее - MySQL с движком MEMORY, или же memcached?

    Быстрее memcached, незначительно. Удобнее redis, значительно.
    Ответ написан
    4 комментария

Лучшие вопросы пользователя

Все вопросы (2)