栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Uncaught (in promise) TypeError: namePath.map is not a function 的解决办法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Uncaught (in promise) TypeError: namePath.map is not a function 的解决办法

场景

在使用 "roadhog": "^2.5.0-beta.4" 作为前端打包工具时,引入ui库yarn add antd-mobile (今天版本是5.18.0) ,使用Form表单,在Input组件输入值时,触发校验后会报错。

经过多次分析, 结合多款react-ui库尝试后得知, 是 rc-field-form这个库版本太高导致的。具体情况见下方:

  • antd-mobile@5.18.0 -> rc-field-form@1.27.0 校验报错见上图
  • react-vant@1.4.4 -> rc-field-form@^1.21.2 校验成功见下方
  • react-vant@1.4.4 -> rc-field-form@1.27.0 校验失败见下方

综上可知,降低版本rc-field-form可以解决问题。

解决方案
  1. 直接用ui库: yarn add react-vant@1.4.4 (若先装了ant-mobile, yarn的缓存机制可能导致出错, 因为yarn.lock版本号没锁定,缘于^符号。参考2降低版本)
react-vant@1.4.4:
  version "1.4.4"
  resolved "https://registry.npmmirror.com/react-vant/-/react-vant-1.4.4.tgz#0b6eedc06c9cbef86eb0abf84f94985174bad207"
  integrity sha512-kVONTSpgYwzxu82KdXwVA5zvvq7X0Y6dqGjLYt9wXmz8shzRiCg+YsE2yyHFnyV/i7d4vnrszjqa63EnGJmhUg==
  dependencies:
    "@react-spring/web" "^9.3.0"
    "@use-gesture/react" "^10.1.1"
    "@vant/icons" "^1.7.0"
    "@vant/popperjs" "^1.1.0"
    clsx "1.1.1"
    rc-field-form "^1.21.2"
    react-transition-group "^4.4.1"
    swiper "^6.8.1"
  1. 未测试过,谁试过可以反馈下, 仍然使用antd-mobile@5时:
  1. yarn add rc-field-form@1.21.2
  2. 修改yarn.lock文件, 将rc-field-form降低版本
  3. 万一别人用了新版的特性,那这方法就GG了
  rc-field-form@1.21.2, rc-field-form@^1.21.2:
  version "1.21.2"
  resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.21.2.tgz#85bda1ee006ae9f1d146e1000337c69b4bb6d101"
  integrity sha512-LR/bURt/Tf5g39mb0wtMtQuWn42d/7kEzpzlC5fNC7yaRVmLTtlPP4sBBlaViETM9uZQKLoaB0Pt9Mubhm9gow==
  dependencies:
    "@babel/runtime" "^7.8.4"
    async-validator "^4.0.2"
    rc-util "^5.8.0"
环境附加描述

node: 12.20.1
react: 17.0.0
react-dom: 17.0.0

总结
  1. 使用5年前的打包器引入如今的新UI库时, 坑不经意就出来了。
  2. roadhog是基于webpack3搞得?
  3. pnpm6压根跑不起来这种老项目, yarn还能撑住。
  4. yarn的机制解释(其实应该叫yarn.lock文件存在的必要性–保持依赖目录结构不发生变化):
若项目有A B两个依赖库, 同时拥有子依赖C, 且C版本不一样。 如下:
A -> C@1.22.3
B -> C@^1.0

那么:

yarn add A
yarn add B

之后:
因为^对版本号的规定, B的子依赖可能被指向C@1.22.3 , 而C如果经历了不兼容的升级(break change似乎有这说法), 那么项目运行嗝屁。

其次,如果yarn先安装B再安装A, 会导致node_modules目录结构变化。(这也算是yarn的不稳定性,pnpm不知道解决了么)

  1. yarn的铺平机制: yarn安装的依赖A有子依赖C。 那么项目可能会直接调用到C。
  2. pnpm6还真不比yarn快多少。。。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号