Javascript 服务器端渲染+;反应路由器重定向

Javascript 服务器端渲染+;反应路由器重定向,javascript,reactjs,react-router,redux,isomorphic-javascript,Javascript,Reactjs,React Router,Redux,Isomorphic Javascript,我有一个更高阶的组件(由下面的wrapAuthComponent应用),它封装了任何需要验证的组件。此组件检查用户是否已登录,如果未登录,则重定向: let next = this.props.location.pathname; this.context.router.push({ pathname: '/login', query: {...this.props.location.query, next} }); 另外,我有一个导航栏组件,允许用户登录: <Index

我有一个更高阶的组件(由下面的
wrapAuthComponent
应用),它封装了任何需要验证的组件。此组件检查用户是否已登录,如果未登录,则重定向:

let next = this.props.location.pathname;
this.context.router.push({
    pathname: '/login',
    query: {...this.props.location.query, next}
});
另外,我有一个导航栏组件,允许用户登录:

<IndexLinkContainer to={`/login? next=${this.props.pathname}`}>
    <NavItem className='nav-bar-button'> Login </NavItem>
</IndexLinkContainer>
现在,让我们来看看虫子当我转到
/foo
且未登录时,会出现以下错误:

React attempted to reuse markup in a container but the checksum was invalid. This generally means that you are using server rendering and the markup generated on the server was not what the client was expecting. React injected new markup to compensate which works but you have lost many of the benefits of server rendering. Instead, figure out why the markup being generated is different on the client or server:
 (client)  href="/login?next=/login" data-reactid=
 (server)  href="/login?next=/foo" data-reactid="

我做错了什么?

根据您的Node.js版本和React,可能与您的问题有关

取自

Node.js的某些版本具有不保留键顺序的Object.assign实现。这可能会导致验证标记时出错,并创建一条警告,提示“React试图在容器中重用标记,但校验和无效”。如果遇到此问题,可以重写Object.assign以使用保留键顺序的多边形填充

安装程序包并设置全局
对象。按以下方式分配
可能会解决您的问题:

Object.assign = require('object-assign');

如果没有,我想在确定问题之前,我需要再看一些您的代码。

您使用的是Node.js和React的哪些版本?奇怪的是,我再也无法重新创建它了。我将通过为V8添加特性测试来修复object assign包(React和许多其他React相关库使用的)中的问题。你的版本可能已经更新,现在运行正常。是的,这是可能的。不管怎样,我有一笔赏金
Object.assign = require('object-assign');