gpt4 book ai didi

javascript - Reactjs 路由器匹配回调参数始终未定义

转载 作者:数据小太阳 更新时间:2023-10-29 05:00:01 25 4
gpt4 key购买 nike

我使用 match 方法进行服务器端渲染,回调中的参数始终未定义。可能出了点问题,但已经整整一天了,我无法理解它。

这是我的服务器端渲染。

// Create location from the history module.
let location = createLocation(req.url);

match({Routes, location}, (error, redirectLocation, renderProps) => {

// TODO : Verify why this is always undefined
console.log('ERROR :: ', error)
console.log('REDIRECT LOCATION :: ', redirectLocation)
console.log('RENDER PROPS :: ', renderProps)

if (redirectLocation) {
res.redirect(redirectLocation.pathname + redirectLocation.search)
}
// TODO : Verify why this is breaking
//else if (error || !renderProps) {
// return console.log('Error while starting server :: ', error)
//}
else {

Transmit.renderToString(RoutingContext, renderProps).then(({reactString, reactData}) => {

console.log('REACT STRING :: ', reactString);
console.log('REACT DATA :: ', reactData);

let output = (
`<!doctype html>
<html lang="en-us" style="min-height:100vh; width: 100%; background-color: #eee;">
<head>
<meta charset="utf-8">
<title>react-isomorphic-pandora-app</title>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:400,100,700">
</head>
<body>
<div id="react-root">${reactString}</div>
</body>
</html>`
);

var webserver = process.env.NODE_ENV === "production" ? "" : "//localhost:8080"

output = Transmit.injectIntoMarkup(output, reactData, [`${webserver}/dist/client.js`])

res.send(output)

}).catch((error) => {

res.send(error.stack).type("text/plain").code(500)

})
}
})

这是我的客户端。

import React from "react";
import ReactDOM from "react-dom";
import {Router} from "react-router";
import Transmit from "react-transmit";
import routes from "../views/Routes";
import {createHistory} from "history";

let reactRoot = window.document.getElementById("react-root");
let history = createHistory();
let location = history.createLocation();

const routerOption = {
routes: routes,
history: history,
location: location
}

Transmit.render(Router, routerOption, reactRoot);

if (process.env.NODE_ENV !== "production") {
if (!reactRoot.firstChild || !reactRoot.firstChild.attributes ||
!reactRoot.firstChild.attributes["data-react-checksum"]) {
console.error("Server-side React render was discarded. Make sure that your initial render does not contain any client-side code.");
}
}

这是我的路线。

import React from "react"
import {Router, Route} from "react-router"
import MenuView from "./Menu"
import DefaultView from "./Default"
import AnotherView from "./Another"

export default (
<Router component={MenuView}>
<Route path="/" component={DefaultView} />
<Route path="/another-view" component={AnotherView} />
</Router>
);

如有任何帮助,我们将不胜感激。谢谢:)

编辑--------

这是我的 MenuView 组件中的代码。

class MenuView extends React.Component {

constructor(){

super()

this.menuItems = [
{
type: MenuItem.Types.SUBHEADER,
text: 'Menu sub header'
},
{
route: '/',
text: 'Home'
},
{
route: '/another-view',
text: 'Another view'
}
]
}

childContextTypes = {
muiTheme: React.PropTypes.object
};

getChildContext() {
return {
muiTheme: ThemeManager.getMuiTheme(DefaultTheme)
}
}

_getSelectedIndex = () => {

let currentItem;

for (let i = this.menuItems.length - 1; i >= 0; i--) {
currentItem = this.menuItems[i];
if (currentItem.route && this.props.history.isActive(currentItem.route)) return i;
}

}

_onLeftNavChange = (e, key, payload) => {

this.props.history.pushState(null, payload.route);

}

render () {

var style = {
paddingTop: '92px'
}

return (
<div>
<LeftNav
ref="leftNav"
menuItems={this.menuItems}
onChange={this._onLeftNavChange}
selectedIndex={this._getSelectedIndex()}
style={style}/>
<section className="content">
{this.props.children}
</section>
</div>
)
}

}

最佳答案

由于 Babel 5 与 Babel 6 和导出路由文件,它应该如下所示:

巴别塔 5:

  Router.match({ routes:routes, location: req.url}, etc ...

巴别塔 6:

  Router.match({ routes:routes.default, location: req.url}, etc ...

关于javascript - Reactjs 路由器匹配回调参数始终未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33528060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com