Closed EdivenH closed 2 years ago
我也遇到了相同的问题
使用 React,请安装 @tarojs/plugin-framework-react 使用 Vue2,请安装 @tarojs/plugin-framework-vue2 使用 Vue3,请安装 @tarojs/plugin-framework-vue3 详见:https://github.com/NervJS/taro/releases/tag/v3.4.0
有解决办法嘛
有临时解决方法吗?
有临时解决方法吗?
上面已经说了咯
上面的我加了没用
Sent from my iPhone
On Jan 17, 2022, at 16:13, Zakary @.***> wrote:
有临时解决方法吗?
上面已经说了咯
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.
上面的我加了没用 … Sent from my iPhone On Jan 17, 2022, at 16:13, Zakary @.***> wrote: 有临时解决方法吗? 上面已经说了咯 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.
用npm 6安装没问题,用npm8安装有问题
上面的我加了没用 … Sent from my iPhone On Jan 17, 2022, at 16:13, Zakary @.***> wrote: 有临时解决方法吗? 上面已经说了咯 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.
用npm 6安装没问题,用npm8安装有问题
npm8也有一样问题
跟这个issues问题一样,参考以下操作就可以临时解决了,手动删除不科学,等版本迭代吧
https://github.com/NervJS/taro/issues/8583#issuecomment-1014644927
@gitlun @greenhaixia
删除这个就可以了
@EdivenH @zhangxf97 @gitlun @khronosleung @zomem 新建了个 React TS 项目测试,没有发现该问题。
按 @khronosleung @zomem 的说法,问题是 @vue/runtime-dom
的类型导致的,但新建 React 项目应该不会安装 vue 的运行时依赖。
分析 yarn.lock
,只有 babel-preset-taro
依赖了 Vue 部分编译时包而已:
@ZakaryCode 兄弟,问题关的有点儿勤~
问题还没有彻底解决,希望重开此问题。
@ZakaryCode 兄弟,问题关的有点儿勤~
问题还没有彻底解决,希望重开此问题。
这个问题的确没有复现额,如果各位排查后还有问题,欢迎提供更详细的信息,随时 reopen 的
背景:因为升级项目package.json的taro依赖包版本,删除整个node_modules
后,使用npm install
重新安装,就出现ts提示异常问题,使用yarn安装就不会出现此问题。
node: v16.13.0
npm: 8.1.0
分析了 package-lock.json
:
@tarojs/webpack-runner
"@tarojs/webpack-runner": {
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/@tarojs/webpack-runner/download/@tarojs/webpack-runner-3.4.0.tgz",
"integrity": "sha512-kflSpvP4L+VAD3SMTCsiFQ1tAITySocX7hbQvsrsiKj2DrlYaDu7RU2JjI15k5SS+bh3aYnX4U14xGLu4XjvJw==",
"dev": true,
"requires": {
"@babel/core": "^7.14.5",
"@tarojs/components": "3.4.0",
"@tarojs/helper": "3.4.0",
"@tarojs/plugin-framework-react": "3.4.0",
"@tarojs/plugin-framework-vue2": "3.4.0",
"@tarojs/plugin-framework-vue3": "3.4.0",
// ....
},
"dependencies": {
// ....
}
}
@tarojs/plugin-framework-vue3
"node_modules/@tarojs/plugin-framework-vue3": {
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/@tarojs/plugin-framework-vue3/download/@tarojs/plugin-framework-vue3-3.4.0.tgz",
"integrity": "sha512-FsGXM0aw+2s1GawZbHPYL/yV/cd89XNqge4phVMi93YFrrMN/DPgR1fbox+Ehdr5j0GjyWVOj8vHElFlAXS1dQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@tarojs/helper": "3.4.0",
"@tarojs/runner-utils": "3.4.0",
"@tarojs/runtime": "3.4.0",
"@tarojs/shared": "3.4.0",
"webpack": "4.46.0"
},
"peerDependencies": {
"vue": "^3.0.0"
}
}
vue
"vue": {
"version": "3.2.29",
"resolved": "https://registry.npmmirror.com/vue/download/vue-3.2.29.tgz",
"integrity": "sha512-cFIwr7LkbtCRanjNvh6r7wp2yUxfxeM2yPpDQpAfaaLIGZSrUmLbNiSze9nhBJt5MrZ68Iqt0O5scwAMEVxF+Q==",
"dev": true,
"peer": true,
"requires": {
"@vue/compiler-dom": "3.2.29",
"@vue/compiler-sfc": "3.2.29",
"@vue/runtime-dom": "3.2.29",
"@vue/server-renderer": "3.2.29",
"@vue/shared": "3.2.29"
}
}
发现在npm@8,peerDependencies
被自动安装了,自行demo验证:
{
"name": "package-a",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {},
"license": "ISC",
"dependencies": {
"lodash": "^4.17.15"
},
"devDependencies": {
"react": "^16.13.0"
},
"peerDependencies": {
"query-string": ">7.0.0"
}
}
npm install
npm@6.14.15
npm@8.1.0~8.3.2
vue 与 react 是不相容的,强行把二者捏在一块儿,总归有些不妥当~
@Chen-jj @ZakaryCode 目前更新到taro 3.4.1,问题依旧,确实删除了node_modues @vue 的文件夹后,报错消失。希望Taro团队可以跟进一下哈,很多人报错,确实是有问题的。
发现在npm@8,peerDependencies 被自动安装了
看来是这个问题,我们再追踪一下
Hello~
你的问题楼上已经提供了解决方案,如果没有更多的问题这个 issue 将在 7 天后被自动关闭。
如果您在这 7 天中更新更多信息自动关闭的流程会自动取消,如有其他问题也可以发起新的 Issue。
Good luck and happy coding~
更新到taro 3.4.1,遇到同样问题,持续更进。
感觉并没有解决啊,我taro update project 3.4.2
更新至了3.4.2
,还是会报错。删了包,再装,还是报错。
'View' cannot be used as a JSX component.
Its element type 'ReactElement<any, any> | Component<ViewProps, any, any> | null' is not a valid JSX element.ts(2786)
package.json
{
"name": "XXX",
"version": "1.0.0",
"private": true,
"description": "XXXX",
"templateInfo": {
"name": "react-native",
"typescript": true,
"css": "sass"
},
"scripts": {
"build:weapp": "taro build --type weapp",
"build:swan": "taro build --type swan",
"build:alipay": "taro build --type alipay",
"build:tt": "taro build --type tt",
"build:h5": "taro build --type h5",
"build:rn": "taro build --type rn",
"build:qq": "taro build --type qq",
"build:jd": "taro build --type jd",
"build:quickapp": "taro build --type quickapp",
"dev:weapp": "npm run build:weapp -- --watch",
"dev:swan": "npm run build:swan -- --watch",
"dev:alipay": "npm run build:alipay -- --watch",
"dev:tt": "npm run build:tt -- --watch",
"dev:h5": "npm run build:h5 -- --watch",
"dev:rn": "npm run build:rn -- --watch --qr",
"dev:qq": "npm run build:qq -- --watch",
"dev:jd": "npm run build:jd -- --watch",
"dev:quickapp": "npm run build:quickapp -- --watch",
"android": "react-native run-android --no-packager",
"ios": "react-native run-ios --no-packager",
"start": "npm run dev:rn --",
"podInstall": "pod-install",
"test": "jest",
"test:coverage": "jest --coverage",
"upgradePeerdeps": "install-peerdeps @tarojs/taro-rn@3.3.19 -o -Y && install-peerdeps @tarojs/components-rn@3.3.19 -o -Y && install-peerdeps @tarojs/router-rn@3.3.19 -o -Y && pod-install",
"lint": "eslint --fix --ext .js,.jsx,.ts,.tsx",
"prettier": "prettier --write ./src",
"precommit": "lint-staged",
"test:staged": "jest --bail --findRelatedTests",
"prepare": "husky install",
"deploy:dev": "taro build --type h5 && NODE_ENV=development node ./deploy",
"deploy:prod": "taro build --type h5 && NODE_ENV=production node ./deploy"
},
"browserslist": [
"last 3 versions",
"Android >= 4.1",
"ios >= 8"
],
"author": "",
"dependencies": {
"@babel/runtime": "^7.7.7",
"@codler/react-native-keyboard-aware-scroll-view": "^2.0.0",
"@react-native-async-storage/async-storage": "~1.15.11",
"@react-native-community/cameraroll": "~4.1.2",
"@react-native-community/clipboard": "~1.5.1",
"@react-native-community/geolocation": "~2.0.2",
"@react-native-community/masked-view": "~0.1.11",
"@react-native-community/netinfo": "~7.1.2",
"@react-native-community/slider": "~4.1.12",
"@react-native-picker/picker": "~2.2.1",
"@taroify/core": "^0.0.23-alpha.0",
"@tarojs/components": "3.4.2",
"@tarojs/react": "3.4.2",
"@tarojs/runtime": "3.4.2",
"@tarojs/taro": "3.4.2",
"@tarojs/taro-rn": "3.3.19",
"cross-env": "^7.0.3",
"default-passive-events": "^2.0.0",
"dva-core": "^2.0.4",
"dva-loading-ts": "^3.0.23",
"dva-loading": "^3.0.22",
"expo-av": "~9.2.3",
"expo-barcode-scanner": "~10.2.2",
"expo-brightness": "~9.2.2",
"expo-camera": "~11.2.2",
"expo-file-system": "~11.1.3",
"expo-image-picker": "~10.2.3",
"expo-keep-awake": "~9.2.0",
"expo-permissions": "~12.1.1",
"expo-sensors": "~10.2.2",
"jweixin-module": "^1.6.0",
"lodash": "^4.17.21",
"mini-html-parser2": "^0.3.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-native": "^0.66.0",
"react-native-device-info": "~8.4.8",
"react-native-gesture-handler": "1.10.3",
"react-native-head-tab-view": "^4.0.0-rc.13",
"react-native-image-resizer": "~1.4.5",
"react-native-iphone-x-helper": "^1.3.1",
"react-native-linear-gradient": "^2.5.6",
"react-native-pager-view": "~5.4.9",
"react-native-reanimated": "*",
"react-native-safe-area-context": "~3.3.2",
"react-native-screens": "~2.18.1",
"react-native-scrollable-tab-view": "1.0.0",
"react-native-smart-refresh": "^1.1.6",
"react-native-svg": "~12.1.1",
"react-native-syan-image-picker": "0.4.10",
"react-native-tab-view": "^3.1.1",
"react-native-tab-view-collapsible-header": "^2.0.1",
"react-native-unimodules": "~0.14.10",
"react-native-webview": "~11.14.3",
"react-redux": "^7.2.6",
"redux": "^4.1.2",
"redux-actions": "^2.6.5",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.4.1",
"schema-typed": "^2.0.2",
"scp2": "^0.5.0",
"taro-virtual-list": "^1.0.13",
"teaset": "file:./thirdFrameworks/teaset"
},
"devDependencies": {
"@babel/core": "^7.16.7",
"@commitlint/cli": "^16.2.1",
"@commitlint/config-conventional": "^16.2.1",
"@tarojs/cli": "3.4.2",
"@tarojs/mini-runner": "3.4.2",
"@tarojs/rn-runner": "3.4.2",
"@tarojs/webpack-runner": "3.4.2",
"@types/react": "^17.0.2",
"@types/webpack-env": "^1.13.6",
"@typescript-eslint/eslint-plugin": "^4.15.1",
"@typescript-eslint/parser": "^4.15.1",
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.6",
"babel-core": "^7.0.0-bridge.0",
"babel-eslint": "^10.1.0",
"babel-jest": "^27.4.6",
"babel-preset-taro": "3.4.2",
"enzyme": "^3.11.0",
"enzyme-to-json": "^3.6.2",
"eslint": "^7.14.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-prettier": "8.4.0",
"eslint-config-taro": "3.4.2",
"eslint-plugin-import": "^2.12.0",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-prettier": "4.0.0",
"eslint-plugin-react": "^7.8.2",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-react-native": "^4.0.0",
"eslint-plugin-react-native-a11y": "^3.2.1",
"husky": "^7.0.4",
"install-peerdeps": "^3.0.3",
"jest": "^27.4.7",
"jest-circus": "^27.5.1",
"lint-staged": "^12.3.4",
"metro-react-native-babel-preset": "^0.69.1",
"node-forge": "^1.2.1",
"pod-install": "^0.1.23",
"prettier": "2.5.1",
"prop-types": "^15.8.1",
"stylelint": "^14.3.0",
"stylelint-config-taro-rn": "^3.4.2",
"stylelint-taro-rn": "^3.4.2",
"typescript": "^4.1.0"
}
}
安装 react-redux 后会报这个错!
经过几轮测试,确实是在安装redux之后出现的类型冲突,@Chen-jj可以尝试复现一下
经过几轮测试,确实是在安装redux之后出现的类型冲突,@Chen-jj可以尝试复现一下
临时解决办法是删除node_modules -> @type -> hoist-non-react-statics 和 react-redux
issue 8583 这个有用
issue 8583 这个有用
对我这里没用,用他这个https://github.com/NervJS/taro/issues/11097#issuecomment-1097497205 有用
issue 8583 这个有用
对我这里没用,用他这个#11097 (comment) 有用
另外,如果你的项目里装了@types/react-native
也会导致View
类型报错,可以卸载该类型文件
+1,我这边也是经常报这样的错,删除 node_modules/@vue 就行了。
PS: 我是用React的
+1,我这边也是经常报这样的错,删除 node_modules/@VUE 就行了。
PS: 我是用React的
+1,有没有什么 npm 钩子可以监听 node_modules 更新,因为每次有新增/更新包,@vue又出现了。。。
same problem…
经过几轮测试,确实是在安装redux之后出现的类型冲突,@Chen-jj可以尝试复现一下
临时解决办法是删除node_modules -> @type -> hoist-non-react-statics 和 react-redux
一样的问题,删除@types/react-redux可以解决
调查拓扑后发现,当开发者项目本地依赖了 @tarojs/cli
并且使用 npm 7+ 安装依赖时,会复现此问题。
因为 @tarojs/cli
依赖 @tarojs/plugin-framework-vue3
,而后者的 peerDependencies 依赖了 vue。正如 @khronosleung 所指明的:npm 7+ 会把 peerDependencies 也进行安装。此时开发者的项目同时存在 react 和 vue 的类型依赖文件,又因为 @tarojs/taro/types/taro.component.d.ts
使用了 ///
同时引入了 react 和 vue 的类型,最终两者类型冲突导致开发者报错:
“View”不能用作 JSX 组件。
其元素类型 "ReactElement<any, any> | Component<ViewProps, any, any> | null" 不是有效的 JSX 元素。ts(2786)
@tarojs/cli
,不再依赖 @tarojs/plugin-framework-vue3
。(最快捷,Taro v3.4.8
能带出去)@tarojs/taro/types/taro.component.d.ts
的写法,根据情况引入对应的框架类型。(比较麻烦,Taro v3.5
修复)关于楼上有同学提到了安装 redux 也会产生此问题,我这边是没有复现的。可以等等 Taro v3.4.8
再试试,如果还有问题,请提供一下详细的复现流程。
Hello~
你的问题楼上已经提供了解决方案,如果没有更多的问题这个 issue 将在 7 天后被自动关闭。
如果您在这 7 天中更新更多信息自动关闭的流程会自动取消,如有其他问题也可以发起新的 Issue。
Good luck and happy coding~
关于楼上有同学提到了安装 redux 也会产生此问题,我这边是没有复现的。
这个其实就是app.tsx使用redux 引入的 Provider就会有这个问题
关于楼上提到的 redux 引起的类型问题,虽然报错类似,但引发的原因是不一样的。
react-redux
v7 依赖 @types/react-redux
,后者有一个依赖:
"@types/react": "*"
版本号指定为 *
时,我理解是可以依赖任意版本。当拓扑中有其它包也依赖了 @types/react
,无需再进行安装。NPM 是这样做的,而 yarn 则不是。yarn 会根据 *
安装最新版本的 @types/react
,当 react18 发布后,就安装上基于 react18 的 @types/react
,同时开发者 package.json 指定了 react17 的 @types/react
。最终两者冲突而产生问题。
node_modules
后使用 npm i
重新安装依赖,这样能最快解决问题。{
"resolutions": {
"@types/react": "17.0.2"
}
}
react-redux
和 @types/react
,在下个大版本 v3.5
支持试一下安装或者升级@types/react-dom
试一下安装或者升级@types/react-dom
node v17.0.1 , npm 8.1.0 使用此方法成功解决
还是有,好恶心啊!
试一下安装或者升级@types/react-dom
我这边引起这个问题是因为 安装了 @testing-library/react
,这个包依赖了 @types/react-dom@18.0.0
,我强制在 package.json里 安装 @types/react-dom@^17
, 然后这个问题就修复了。
@codedart2018 你试试,安装对应版本的react-dom
"react": "17.0.0", "react-dom": "17.0.0", "@types/react": "17", "@types/react-dom": "17",
都改成 17,我解决了
这个问题在yarn里也同样存在. 用上面大家的玄学貌似都无法曲线救国
这个问题在yarn里也同样存在. 用上面大家的玄学貌似都无法曲线救国
尝试了一下,在 package.json 里增加 resolutions 节点是有效的 可以再试试看
@tarojs/components
导出的组件ts提示异常(***不是有效的JSX Element)。
npx create-turbo@latest
初始化一个monorepo项目taro init
初始化一个taro react项目pnpm create vite
初始化一个react ts项目和一个vue ts项目pages/index/index.tsx
文件,View
组件提示不是有效的JSX Element点击定义进去发现@types/react
和@vue/runtime-dom
的JSX.Element
的接口合并异常了,因为react和vue定义的JSX.Element的类型不一致,接口无法合并,所以会提示异常。
仓库为monorepo,有react的项目,也有vue的项目,所以不能移除两者的类型声明文件。
"compilerOptions": {
"jsx": "react-jsx",
"baseUrl": ".",
"paths": {
"react/jsx-runtime": ["./types/jsx-runtime.d.ts"]
}
},
在types文件夹下创建一个名为jsx-runtime.d.ts
的文件,并写入以下内容
declare global {
namespace JSX {
// @ts-ignore
type Element = any;
}
}
export {};
@tarojs/components
导出的组件ts提示异常(***不是有效的JSX Element)。
补充一下,使用的taro版本为3.5
版本 3.2,删除 node_modules/@types 下的所有的 namespace JSX{} 有用
6 现在都不出一个版本解决这个问题吗
3.6.2的版本里还是存在这个问题,用npm、yarn以及npx创建项目都试过了,一直解决不了
这个问题咋还是好几版本了都没有解决呢 用了上面 @Assone 提供的在types下新建类型文件,在tsconfig.json中引入的方式解决了。
https://github.com/towry/n/issues/174
检查当前vscode用的 jsx
类型是否正确:
type TestJsx = JSX.Element
鼠标悬浮到 JSX
上点击,看看 vscode 用的是不是 OK的。
Disable all vue-related extension packages of vscode, which is effective for me. It is recommended to try it out.
非常恶心,即使是最新的taro版本,独立起项目可以解决,但是在monorepo项目中,taro.component.d.ts 中,导入vue的行为会因为monorepo中有其他项目安装vue而导致读到vue的类型,注释掉这一行就可以正常。 目前用pnpm patch强行解决了,想问这种多包不能分开吗,类型混在一起依靠 d.ts 找不到对应依赖来解决感觉不太好配合monorepo
我是安装 "taro-hooks": "^2.0.1"
引入的问题,退到 "taro-hooks": "^1.5.10"
就没有问题了。
相关平台
微信小程序
复现仓库
https://github.com/NervJS 小程序基础库: 2.21.2 使用框架: React
复现步骤
从@tarojs/components引入 View Text 组件,ts 报错
“View”不能用作 JSX 组件。 其元素类型 "ReactElement<any, any> | Component<ViewProps, any, any> | null" 不是有效的 JSX 元素。ts(2786)
期望结果
ts 正确提示
实际结果
ts报错
环境信息