我正在升级到React v16。发布文档指出:“除少数例外,如果您的应用程序在15.6中运行而没有任何警告,则应在16中运行。”我的应用程序在15.6.2上运行良好(并且没有警告),但在16.0.0上却根本无法运行,在尝试运行捆绑包时抛出了奇怪的错误:Uncaught TypeError: Cannot read property 'string' of undefined
加载捆绑文件之一时,Uncaught TypeError: Cannot read property 'string' of undefined"
加载另一个捆绑文件。
我怀疑此代码是不兼容的根源:
ReactDOM.render((
<Router>
<div>
<Route component = { Header } />
<Switch>
<Route exact path = '/' component = { Home } />
<Route exact path = '/index.html' component = { Home } />
<Route path = "/browse" component = { Browse } />
. . . . . . . etc. . . . .
</Switch>
<Route component = { Footer } />
</div>
</Router>
), document.getElementById("main"))
我是在任何生命周期方法之外渲染AFAIK的,此代码是我的webpack配置文件中应用程序的入口点。
如果可以使用,我很高兴追加更多的构建脚手架。该应用程序在15.6.2下完美运行。
最佳答案
未捕获的TypeError:无法读取未定义的属性'string'
这看起来是由类似的代码引起的
MyComponent.propTypes = {
something: React.PropTypes.string
};
这是因为
PropTypes
已被移至React 16中的另一个包中:MyComponent.propTypes = {
something: PropTypes.string
};
该代码会在15天发出警告,因此,如果您没有看到警告,则说明您的设置可能有问题。例如,也许您在开发中错误地使用了React的生产版本,因此没有看到警告。
看到您使用了React Router,请确保将其更新为与React 16兼容的版本。最新的3.x和4.x版本都兼容。