Guest User

Untitled

a guest
Apr 24th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. import * as React from 'react';
  2. import * as ReactDOM from 'react-dom';
  3. import * as ReactDOMServer from 'react-dom/server';
  4. import { Provider } from 'react-redux';
  5. import hypernova, { serialize, load } from 'hypernova';
  6. import { Store } from 'redux';
  7.  
  8. export const renderReactAsyncReduxServer = (name: string, C: React.ComponentClass, store: Store<any>) => hypernova({
  9. server() {
  10. return (props: any) => {
  11. const wrappedComponent = <Provider store={store}><C /></Provider>;
  12. const contents = ReactDOMServer.renderToString(wrappedComponent);
  13. const serializeContent = serialize(name, contents, store.getState());
  14. // console.log("SERIALIZECONTENT", serializeContent);
  15. return serializeContent;
  16. };
  17. },
  18. client() {
  19. /* tslint:disable:no-empty */
  20. }
  21. });
  22.  
  23. export const renderReactAsyncReduxClient = (name: string, C: React.ComponentClass, reduxStoreCreator: (data: any) => Store<any>) => hypernova({
  24. server() {
  25. },
  26. client() {
  27. const payloads: any[] = load(name);
  28. if (payloads) {
  29. payloads.forEach((payload) => {
  30. const { node, data } = payload;
  31. // console.log("CLIENT-DATA", data);
  32. const store = reduxStoreCreator(data);
  33. const wrappedComponent = <Provider store={store}><C /></Provider>;
  34. if (ReactDOM.hydrate) {
  35. ReactDOM.hydrate(wrappedComponent, node);
  36. } else {
  37. ReactDOM.render(wrappedComponent, node);
  38. }
  39. });
  40. }
  41. }
  42. });
Add Comment
Please, Sign In to add comment