react-native - 将 expo 项目移动到 react native 后收到警告 "componentWillReceiveProps has been renamed"

标签 react-native react-navigation expo

我将我的 expo 项目迁移到 React Native 项目。 我删除了 expo,并尝试使用 native 方式添加启动画面和推送通知,并在没有 expo 的情况下添加字体。 我还使用没有 expo 的本地方式安装了 react 导航。 我使用 android studio 和 Xcode 运行该项目。 我有一些问题,但我通过修复我的 package.json 文件中的一些包版本来修复它们 现在我得到这个错误:

Warning: componentWillReceiveProps has been renamed, and is not recommended for use. See ... for details.

* Move data fetching code or side effects to componentDidUpdate.
* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: ***
* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.

Please update the following components: SafeView

我的旧包文件:

    "react": "16.8.3",
    "react-dom": "^16.8.6",
    "react-native": "https://github.com/expo/react-native/archive/sdk- 
     33.0.0.tar.gz",
    "react-native-autocomplete-input": "^4.1.0",
    "react-native-elements": "^1.1.0",
     ....
    "react-navigation": "^4.0.10",
    "react-navigation-drawer": "^2.3.3",
    "react-navigation-material-bottom-tabs": "^1.0.0",
    "react-navigation-stack": "^1.10.3",

My current version use safe area context with react navigation :

    "dependencies": {
    "@react-native-community/async-storage": "^1.7.1",
    "@react-native-community/masked-view": "^0.1.6",
    "@react-native-community/push-notification-ios": "^1.0.6",
    "axios": "^0.19.0",
    "buffer": "^5.4.3",
    "color": "^3.1.2",
    "libphonenumber-js": "^1.7.26",
    "moment": "^2.24.0",
    "native-base": "^2.13.5",
    "native-base-autocomplete": "^1.3.2",
    "querystring": "^0.2.0",
    "react": "16.9.0",
    "react-native": "0.61.5",
    "react-native-elements": "^1.1.0",
    "react-native-event-source": "^1.1.0",
    "react-native-gesture-handler": "^1.5.6",
    "react-native-globalize": "^3.0.0",
    "react-native-material-textfield": "^0.16.1",
    "react-native-modal-selector": "^1.1.1",
    "react-native-paper": "^2.16.0",
    "react-native-push-notification": "^3.1.9",
    "react-native-reanimated": "^1.0.1",
    "react-native-responsive-ui": "^2.1.1",
    "react-native-root-toast": "^3.1.2",
    "react-native-safe-area-context": "^0.7.2",
    "react-native-screens": "^2.0.0-beta.2",
    "react-native-slider": "^0.11.0",
    "react-native-splash-screen": "^3.2.0",
    "react-native-vector-icons": "^6.6.0",
    "react-navigation": "^4.0.10",
    "react-navigation-drawer": "^2.3.3",
    "react-navigation-material-bottom-tabs": "^1.0.0",
    "react-navigation-stack": "^1.10.3",
    "react-redux": "^7.1.0",
    "redux": "^4.0.4",
    "redux-devtools": "^3.5.0",
    "redux-devtools-extension": "^2.13.8",
    "redux-thunk": "^2.3.0",
    "search-params": "^2.1.3",
    "whatwg-url": "^8.0.0"
  },

最佳答案

在您的情况下,实际上这不是错误。这是来自 React Native 的警告。

componentWillReceiveProps 是一个同步钩子(Hook)。在这个钩子(Hook)中调用异步函数(如数据获取)将需要在设置新 Prop 和数据完成加载之间进行渲染。

因此,componentWillReceiveProps 已被弃用,原因如下:

  1. 使用componentDidUpdate

因此,我建议您尽可能使用 componentDidUpdate 钩子(Hook)并更新您的代码。

  • 比较 componentWillMountcomponentDidMount 时会发生类似的事情。每当您需要进行异步操作时使用 componentDidMount 并在任何情况下忘记 componentWillMount

关于react-native - 将 expo 项目移动到 react native 后收到警告 "componentWillReceiveProps has been renamed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60204116/

相关文章:

javascript - HOC 和标准组件之间的主要区别是什么?我什么时候应该正确使用它们?

javascript - 如何使用 ListView 使用回调 ref - React Native

react-native - 在react-native中构建签名发布APK的正确方法是什么?

react-native - React native Reanimated 条件动画 View 移动

javascript - React - 从其他链接导航到部分

android - 无法通过隧道在物理设备上运行我的 native 应用程序

react-native - 如何隐藏 react-navigation 标题下的阴影?

javascript - react 导航 : 'navigation.state.params' is always undefined in 'static navigationOptions'

reactjs - 如何在 React Native(expo)中创建文本文件?

react-native - 使用 Jest 模拟命名导入