使用withRouter

时间:2017-04-12 00:52:15

标签: reactjs react-router

我正在尝试使用React路由器v4设置项目,我设法让它工作得很好。

但是,当我尝试将函数实现回滚到顶部according to this docs时,会出现此错误:

  

警告:不建议通过主React包访​​问PropTypes。请改用npm中的prop-types包。

我已经下载了React prop-types包。仅当我在组件中设置withRouter()时才会出现此错误,例如:

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { withRouter } from 'react-router';

class ScrollTop extends Component {
    componentDidUpdate(prevProps) {
        if ( this.props.location !== prevProps.location ) {
            window.scrollTo(0, 0);
        }
    }

    render() {
        return (
            <div>{ this.props.children }</div>
        );
    }
}

export default withRouter(ScrollTop);

上面的代码会生成错误。但是如果我使用下面的代码:

import React, { Component } from 'react';
import PropTypes from 'prop-types';

class ScrollTop extends Component {
    // ..same as code above..
}

export default ScrollTop;

这不会显示错误,但在更改路线时也不会回滚到顶部。

我该如何解决这个问题?或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

React 15.5.0 added this deprecation warning。即使您从其新位置导入PropTypes,最新版本反应路由器v4也不是。 PR for it已合并,但尚未发布。

您的选择是等待react-router发布版本(我希望很快就会发布),从master安装react-router,或者将React降级到15.4.0。