React Router Сервер рендеринга - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь реализовать SSR для моего приложения реагирования, которое содержит реагирующий маршрутизатор и реагирующую пружину, но оно не отвечает, как ожидалось, я не могу go переходить с одной страницы на другую, а также не происходит никаких эффектов перехода , Я также пытался опубликовать sh его для netlify, но после этого он показывает ошибку

"Приложение создано с использованием create-реагировать-приложение"

вот мой код:

package.json
scripts

"scripts": {
		"start": "react-scripts start",
		"build": "react-scripts build",
		"test": "react-scripts test",
		"eject": "react-scripts eject",
		"dev": "nodemon server/index.js"
	},

server/index.js

require('ignore-styles');

require('@babel/register')({
    ignore: [/(node_modules)/],
    presets: ['@babel/preset-env', '@babel/preset-react']
});

require('./server')

Router.js

import React from 'react';
import { Switch, Route, useLocation } from "react-router-dom";
import { useTransition, animated } from 'react-spring';
import SignIn from './signIn';
import SignUp from './signUp';
import CreateTask from './createtTask';
import { makeStyles } from "@material-ui/core";
import Dashboard from './dashBoard';

const useStyle = makeStyles(theme => ({
    root: {
        flexGrow: 1,
        height: "100%",
    }
}));

const Router = () => {
    const location = useLocation();
    const classes = useStyle();
    console.log(location)
    const transitions = useTransition(location, location => location.pathname, {
        from: { opacity: 0.9, transform: 'translate3d(50%,0,0)' },
        enter: { opacity: 1, transform: 'translate3d(0%,0,0)' },
        leave: { opacity: 0, transform: 'translate3d(-50%,0,0)' },
        config: { duration: 800 },
    });
    return transitions.map(({ item: props, location, key }) => (
        <animated.div key={key} style={{ ...props }} className={classes.root}>
            <Switch>
                <Route exact path="/" render={(props) => <SignIn {...props} />} />
                <Route exact path="/signUp" render={(props) => <SignUp {...props} />} />
                <Route exact path="/createTask" render={(props) => <CreateTask {...props} />} />
                <Route exact path="/dashboard" render={(props) => <Dashboard {...props} />} />

            </Switch>
        </animated.div>
    ))
}

export default Router;

App.js

import React from 'react';
import { StaticRouter } from 'react-router-dom';
import Router from './components/router';
const App = () => {
    return (
        <React.Fragment>
            <StaticRouter>
                <Router />
            </StaticRouter>
        </React.Fragment>
    )
}

export default App;

Server.js

import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from '../src/App';
import express from 'express';
import fs from 'fs';
import path from 'path';
import { Server } from 'http';
const app = express();

const PORT = process.env.PORT || 2000;
app.use('^/$', (req, res, next) => {
    fs.readFile(path.resolve('./build/index.html'), 'utf8', (err, data) => {
        if (err) {
            console.log(err);
            return res.status(500).send("Error occured");
        }
        return res.send(data.replace('<div id="root"></div>',
            `<div id="root">${ReactDOMServer.renderToString(<App />)}</div>`))
    })
})
app.use(express.static(path.resolve(__dirname, '..', 'build')));
app.listen(PORT, () => { console.log(`App is up on ${PORT}`) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...