react-router - TypeError : element. type.toLowerCase 不是函数

标签 react-router react-redux react-dom react-dom-server react-ssr

我在为 React 应用程序设置 SSR 时遇到问题。渲染的服务器端代码如下:

    app.use((req, res) => {
    const context = {}

    const body = ReactDOMServer.renderToString(
        React.createElement(
            Provider, { store },
            React.createElement(
                StaticRouter, { location: req.url, context: context },
                React.createElement(Layout, null, React.createElement(Routes))
            )
        )
    )
    if (context.url) {
        res.redirect(context.url)
    } else {
        res.status(200).send(template({ body }))
    }
})

路由配置如下:
路由.js
const Routes = () => {
  return (
    <Switch>
      <Route path="/" exact component={Home}/>
      <Route path="*" component={NotFound}/>
    </Switch>
  )
}

    export default Routes

应用程序.js
const App = () => {  
    return (
      <Provider store={store}>
        <BrowserRouter>
        <Layout>
              {router}
        </Layout>
        </BrowserRouter>
    </Provider>
    );
}

export default App

它抛出以下错误:
Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: object.
TypeError: element.type.toLowerCase is not a function
    at ReactDOMServerRenderer.renderDOM (../node_modules/react-dom/cjs/react-dom-server.node.development.js:2304:28)
    at ReactDOMServerRenderer.render (../node_modules/react-dom/cjs/react-dom-server.node.development.js:2298:21)
    at ReactDOMServerRenderer.read (../node_modules/react-dom/cjs/react-dom-server.node.development.js:2234:19)
    at Object.renderToString (../node_modules/react-dom/cjs/react-dom-server.node.development.js:2501:25)
    at app.use (../server.js:59:33)

当我尝试打印时 console.log(React.createElement(Routes));它显示如下:
{ '$$typeof': Symbol(react.element),
  type: [Function: Routes],
  key: null,
  ref: null,
  props: {},
  _owner: null,
  _store: {} }

我已经使用 babel 从 Routes 文件创建了 CompiledRoutes 文件,并将其导入到 server.js 中,如下所示:
const Routes = require('./client/CRoutes').default

有人可以指导我这里有什么问题吗?提前致谢。

最佳答案

尝试改变

React.createElement(Layout, null, React.createElement(Routes))


React.createElement(Layout, null, React.createElement(Routes.default))

您可能正在使用 require在服务器端,而不是 import ,这会导致一些差异。

关于react-router - TypeError : element. type.toLowerCase 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49093653/

相关文章:

javascript - 如何使用ReactJS获取用户输入字段的值?

javascript - 从 react-router-dom 属性 'sumParams' 升级版本 4 useParams () 后 TypeScript 错误在类型 '{}' 上不存在

reactjs - React-Router的Link-To更新URL但不刷新页面

javascript - react 路由器:开关重定向在 localhost:xxxx 中不起作用。从 baseUrl 重定向到其他页面

javascript - 如何使用 React Redux 执行简单的 onClick 来更改子组件的类名?

javascript - 是否允许在 React 上下文中存储不可序列化的对象?

javascript - 如何在React中创建和删除组件?

javascript - 如何使用 React.js 用类包围每个 X 元素

node.js - React 路由器显示空白页面

javascript - React 脱离上下文的链接无法导航