9
votes

"React.createContext n'est pas une fonction" - mais je ne l'utilise pas

J'obtiens l'erreur "React.createContext is not a function" lors de l'exécution d'une application native react. J'ai recherché "createContent" dans le code, il n'existe pas.

Toute idée de la raison de l'erreur.

Il s'agit d'une version iOS d'une application qui s'exécute déjà sur android.

Voici mon fichier package.json:

{
  "name": "newapp",
  "version": "0.0.2",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest --verbose --coverage",
    "test:update": "jest --verbose --coverage --updateSnapshot",
    "test:watch": "jest --verbose --watch",
    "coverage": "jest --verbose --coverage && xdg-open ./coverage/lcov-report/index.html",
    "lint": "npx eslint --fix ./src/*"
  },
  "dependencies": {
    "apollo-boost": "0.1.17",
    "axios": "^0.18.0",
    "babel": "^6.23.0",
    "buffer": "5.1.0",
    "cross-fetch": "^3.0.0",
    "enzyme": "^3.3.0",
    "graphql": "0.13.2",
    "graphql-tag": "2.10.0",
    "jasmine-react-helpers": "^0.2.2",
    "lodash": "4.17.5",
    "moment": "2.21.0",
    "query-string": "^6.1.0",
    "react": "16.2.0",
    "react-addons-test-utils": "^15.6.2",
    "react-apollo": "2.2.4",
    "react-dom": "^16.4.0",
    "react-native": "0.51.0",
    "react-native-elements": "0.19.0",
    "react-native-fabric": "^0.5.1",
    "react-native-htmlview": "^0.12.1",
    "react-native-link-preview": "^1.3.5",
    "react-native-login": "^0.0.1-alpha.2",
    "react-native-login-keycloak": "^1.0.2",
    "react-native-onesignal": "3.2.6",
    "react-native-push-notification": "https://github.com/Dhanraj-bidchat/react-native-push-notification.git",
    "react-native-sleek-loading-indicator": "^0.1.3",
    "react-native-spinkit": "^1.1.1",
    "react-native-svg": "6.2.2",
    "react-native-swipe-cards": "^0.1.1",
    "react-native-swiper": "1.5.13",
    "react-native-vector-icons": "4.5.0",
    "react-navigation": "1.5.6",
    "react-redux": "5.0.7",
    "redux": "^3.7.2",
    "redux-logger": "^3.0.6",
    "redux-persist": "5.9.1",
    "redux-thunk": "^2.2.0",
    "victory-native": "0.17.2",
    "whatwg-fetch": "2.0.4"
  },
  "devDependencies": {
    "babel-eslint": "^8.2.3",
    "babel-jest": "^22.4.4",
    "babel-plugin-dynamic-import-node": "^1.2.0",
    "babel-plugin-syntax-dynamic-import": "^6.18.0",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react-native": "4.0.0",
    "enzyme-adapter-react-16": "^1.1.1",
    "enzyme-to-json": "^3.3.4",
    "eslint": "^4.19.1",
    "eslint-config-standard": "^11.0.0",
    "eslint-plugin-import": "^2.12.0",
    "eslint-plugin-jest": "^21.17.0",
    "eslint-plugin-node": "^6.0.1",
    "eslint-plugin-only-warn": "^1.0.1",
    "eslint-plugin-promise": "^3.8.0",
    "eslint-plugin-react": "^7.9.1",
    "eslint-plugin-standard": "^3.1.0",
    "jest": "^23.5.0",
    "jest-resolve": "^23.0.0",
    "jest-serializer-enzyme": "^1.0.0",
    "react-native-mock-render": "^0.0.26",
    "react-test-renderer": "^16.3.2",
    "redux-mock-store": "^1.5.1",
    "sinon": "^5.0.10"
  },
  "jest": {
    "preset": "react-native",
    "setupFiles": [
      "./jest-setup.js"
    ],
    "snapshotSerializers": [
      "enzyme-to-json/serializer"
    ],
    "modulePaths": [
      "<rootDir>/src",
      "<rootDir>/node_modules"
    ],
    "transform": {
      "^.+\\.js$": "babel-jest",
      "^.+\\.jsx?$": "babel-jest"
    },
    "transformIgnorePatterns": [
      "node_modules/(?!(react-native-safe-area-view|react-navigation|react-native-htmlview|react-native-fabric|react-native-login|react-native-elements|react-native-vector-icons|react-native-spinkit|victory-pie|victory-chart|victory-core|react-native-svg|react-native|redux-persist|victory-native|react-native-swipe-cards|react-native-swiper)/)"
    ],
    "moduleNameMapper": {
      "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/assetsTransformer.js",
      "\\.(css|less)$": "<rootDir>/assetsTransformer.js"
    }
  }
}


0 commentaires

4 Réponses :


3
votes

Essayez de mettre à jour React to React vers 16.4.1


3 commentaires

La mise à niveau peut être douloureuse. J'attendrai d'autres réponses. Je vous remercie!


Vouliez-vous mettre un commentaire et l'avez publié comme réponse?


Non, je me souviens avoir eu ce problème. La mise à niveau vers 16.4.1 l'a résolu pour moi.



10
votes

Dans votre package, react et react-dom n'ont pas la même version, c'est pourquoi vous obtenez l'erreur. react-dom@16.4.0 voudra avoir accès à React.createContext mais react@16.2.0 ne l'aura pas.

Pour le faire fonctionner exécutez la commande suivante:

npm install react@16.4.0

Ou si vous utilisez NPM:

yarn upgrade react@16.4.0


2 commentaires

J'ai essayé le correctif ci-dessus sur mon react native 0.53 qui avait réagi 16.2 avec la même erreur et je viens de recevoir une autre erreur à propos de styled-components.native.cjs.js '


J'ai la même version de react et react-dom ne résout pas le problème et le problème TypeError: _react.default.createContext n'est pas une fonction persiste.



1
votes

En utilisant npm , je l'ai résolu en passant à 16.4.1:

npm i react@16.4.1


1 commentaires

Merci beaucoup. A travaillé pour moi.



0
votes

Si npm i react @ latest react-dom @ latest ne fonctionne pas, essayez de faire npm update , cela mettra à jour tous les packages.


0 commentaires