【问题标题】:react-native cannot read property 'bindings' of nullreact-native 无法读取 null 的属性“绑定”
【发布时间】:2018-07-07 04:53:44
【问题描述】:

我尝试运行一个 react-native 模拟器。

但是,这个错误出现在模拟器中:

Failed to load bundle(http://localhost:8081/index.bundle?
platform=ios&dev=true&minify=false) 
with error:(/Users/sugawarasyuta/Desktop/albums/index.js:
Cannot read property 'bindings' of null(null))

我仔细检查了我的代码语法。但我觉得这与此无关。你知道如何解决这个错误吗?

这是我的文件:

index.js

import React from 'react';
import { AppRegistry,View } from 'react-native';
import Header from './src/components/header';
import AlbumList from './src/components/AlbumList';


//Create a component
const App = () => (
<View>
<Header headerText= {'albums'} />
<AlbumList />
</View>
);

AppRegistry.registerComponent('albums', () => App );

AlbumList.js

import React,{Component}from 'react';
import {View, Text} from 'react-native';
import axios from 'axios';

class AlbumList extends Component {

componentWillMount(){
    axios.get('https://rallycoding.herokuapp.com/api/music_albums')
    .then(response => console.log(response));

}
render(){
return(
    <View>
        <Text>AlbumList!!!</Text>
    </View>
    );
}
}
export default AlbumList;

这些是终结语句:

/usr/bin/codesign --force --sign - --entitlements /Users/sugawarasyuta/Desktop/albums/ios/build/Build/Intermediates.noindex/albums.build/Debug-iphonesimulator/albums.build/albums.app.xcent --timestamp=none /Users/sugawarasyuta/Desktop/albums/ios/build/Build/Products/Debug-iphonesimulator/albums.app

/Users/sugawarasyuta/Desktop/albums/ios/build/Build/Products/Debug-iphonesimulator/albums.app: resource fork, Finder information, or similar detritus not allowed

Command /usr/bin/codesign failed with exit code 1



** BUILD FAILED **


The following build commands failed:

    CodeSign build/Build/Products/Debug-iphonesimulator/albums.app
(1 failure)

Installing build/Build/Products/Debug-iphonesimulator/albums.app
Launching org.reactjs.native.example.albums
org.reactjs.native.example.albums: 8385

这是我的package.json。这些依赖是否正确?

{
"name": "albums",  
"version": "0.0.1",

"private": true,

"scripts": {
 "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },


  "dependencies": {

"axios": "^0.18.0",

"babel-plugin-transform-es2015-arrow-functions": "^6.22.0",

"react": "16.3.1",

"react-native": "^0.56.0"

 },

"devDependencies": {

"@babel/preset-env": "^7.0.0-beta.53",

"babel-jest": "23.0.1",

"babel-preset-es2015": "^6.24.1",

 "babel-preset-react-native": "4.0.0",

"eslint-config-rallycoding": "^3.2.0",

 "jest": "23.1.0",

"react-test-renderer": "16.3.1"

},

"jest": {

 "preset": "react-native"

 }

}

我将"babel-preset-react-native""4.0.0"升级到"^5.0.1",又出现了一个错误:

error: bundling failed: SyntaxError: 
/Users/sugawarasyuta/Desktop/albums/index.js: Unexpected token (11:3)



  10 | const App = () => {

> 11 |    <Header headerText= {'albums'} />

     |    ^

  12 | 

  13 | };



at Parser.raise

(/Users/sugawarasyuta/Desktop/albums/node_modules
/@babel/core/node_modules/babylon/lib/index.js:776:15)

at Parser.unexpected    
(/Users/sugawarasyuta/Desktop/albums/node_modules/
@babel/core/node_modules/babylon/lib/index.js:2079:16)

at Parser.parseExprAtom (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:3157:20)

at Parser.parseExprSubscripts (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:2757:21)

at Parser.parseMaybeUnary (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:2736:21)

at Parser.parseExprOps (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:2643:21)

at Parser.parseMaybeConditional (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:2615:21)

at Parser.parseMaybeAssign (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:2562:21)

at Parser.parseExpression (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:2515:21)

at Parser.parseStatementContent (/Users/sugawarasyuta/Desktop/albums/node_modules/@babel/core/node_modules/babylon/lib/index.js:4076:21)
 BUNDLE  [ios, dev] ../../index.js ░░░░░░░░░░░░░░░░ 0.0% (0/1), failed.

我觉得这不仅仅是因为语法错误,而是依赖的原因。你知道我该如何解决它吗?

【问题讨论】:

  • 你使用哪个版本的 react-native?仅供参考,github上有类似的问题。 github.com/facebook/react-native/issues/…
  • 感谢您的评论!我正在使用这些版本。 react-native-cli:2.0.1 react-native:0.56.0
  • 我使用 watchman: 4.9.0.

标签: react-native


【解决方案1】:

没有任何进一步的信息,我怀疑你需要更新 babel-preset-react-native。

升级到 0.56 时,请确保提升您的 babel-preset-react-native package.json 对 ^5.0.1 或更新版本的依赖。

https://github.com/facebook/react-native/releases

【讨论】:

  • 我稍后试试,然后报告。
【解决方案2】:

对于 React Native 0.57

升级到 React Native 0.57 时,请按照以下步骤解决此问题:

  1. package.json中的React版本升级到16.5

  2. 将 babel-preset 依赖从 "babel-preset-react-native": "^5" 更改为 "metro-react-native-babel-preset": "^0.45.0"

  3. .babelrc 配置更改为:

    {
      "presets": ["module:metro-react-native-babel-preset"]
    }
    
  4. 运行 rm -rf node_modules/ 删除旧模块

  5. 运行npm install 以获取新的node_modules/

  6. 运行 react-native upgrade 以升级您的配置文件

  7. 运行 rm -rf android/build/ ios/build/ 以摆脱旧编译的应用程序

  8. 再次运行您的应用,它应该可以工作了!

Source for the first steps

【讨论】:

  • 当我做 react-native-git-upgrade 它抛出: git-upgrade ERR!错误:找不到相对于目录“project;'s root directory”的预设“module:metro-react-native-babel-preset”。为什么?
  • @CaioSaldanha 这是一个常见错误,建议对 RN 0.59+ 使用 react-native 升级,或者如果您有旧版本的 react-native 使用 rn-diff-purge 进行比较并手动更新。
【解决方案3】:

REACT NATIVE 0.57 全新安装 iOS ANDROID

我从 react-native init projectName 重新安装了 react native

package.json

{
  "name": "JesteeTestee",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
},
  "dependencies": {
    "react": "^16.5.2",
    "react-native": "0.57.4"
},
devDependencies": {
  "babel-jest": "23.6.0",
  "jest": "23.6.0",
  "metro-react-native-babel-preset": "^0.47.0",
  "react-test-renderer": "16.6.0-alpha.8af6728"
},
"jest": {
  "preset": "react-native",
  "transform": {
    "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
  }
}

}

如您所见,它是 RN@0.57.4 和 metro-react-native-babel-preset@0.47.0 的最新当前版本。

也是默认的.babelrc

{
  "presets": ["module:metro-react-native-babel-preset"]
}

只需将以下内容添加到 package.json 的 Jest 部分;

"transform": {
  "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
}

考虑到我今天花了几个小时找到这个,如果您正在重新安装并遇到障碍,只需删除项目,重新开始并仅尝试这个简单的步骤。

针对 react-native run-ios 和 run-android 测试。

【讨论】:

    【解决方案4】:

    对于 React-Native 版本 0.57 或更高版本

    在 babel.config.js 上,只需如下更改预设

    "presets": ["module:metro-react-native-babel-preset"]
    

    在尝试了许多不同的解决方案后,这对我有用

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 2018-03-27
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2016-06-10
      • 2021-10-31
      • 1970-01-01
      相关资源
      最近更新 更多