我正在升级到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版本都兼容。

09-25 19:14