ReactNative.createClass已被弃用,请使用来自“React”包的React.createClass。

7

有人知道为什么会出现这个警告吗?

另一个警告是:ReactNative.createElement已经过时。请使用来自“react”包的React.createElement代替。

代码如下:

var React = require('react-native');

var {
Text,
View,
StyleSheet,
} = React;

module.exports = React.createClass({
render: function(){
return(
  <View>
    <Text>{this.props.titleName}</Text>
  </View>
);
}
});

var styles = StyleSheet.create({
container:{

},
text:{

}
});
1个回答

18

从 react-native 导入 React 已经在 0.25.1 版本中被弃用,官方公告。在 0.26 版本中将停止起作用。

现在应该这样做:

import React from 'react';

import {
    Text,
    View,
    StyleSheet,
} from 'react-native';
编辑: 如果您在修复代码后仍然收到弃用警告,则可能正在使用尚未更新的依赖项。为了解决这些警告,请执行以下操作:
  1. 检查是否有可用的更新以修复导入。
  2. 使用此脚本自动重写您的依赖项以使用正确的导入。它需要相当长的时间,并且会重写一些与react无关的文件。jscodeshift -t transform.js PATH_TO_YOUR_PROJECT/node_modules/
  3. 要找到仍需要从react-native中使用React的剩余文件,您可以在node_modules/react-native/Libraries/ReactNative/ReactNative.js的第41行设置断点,这是触发警告的位置。

当您发现未更新的依赖项时,最好提交问题或如果您有时间,则提交PR。


1
我也遇到了这个问题。当我们已经双重检查React是否从'react'导入时,如何找到错误的源头?它可能在我无数的node_modules中之一吗?不幸的是,调试工具并不更具体。 - Michael Fulton
2
是的,它可能在您的某个依赖项中。到目前为止,我发现最好的方法是在node_modules/react-native/Libraries/ReactNative/ReactNative.js的第41行设置断点,这是触发警告的地方。 - Daniel Basedow
1
FYI,在#2中链接的codemod现在支持各种导入风格,包括在其他地方进行解构。 - reergymerej

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接