Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用 map 渲染组件的时候,map 回调的第一个参数引用方式有问题导致渲染出错 #4174

Closed
shockw4ver opened this issue Aug 15, 2019 · 2 comments
Assignees

Comments

@shockw4ver
Copy link

问题描述
使用 map 函数渲染组件的时候,编译出来的代码里对 map 回调的第一个参数引用有问题,导致组件不能正确的渲染。

复现步骤

  1. 编写如下代码:
//...
renderDays () {
  days = this.getDays() // 这里返回一个数组,每个数组项是一个对象或者控字符串
  return days.map((item, index) => {
    item = item || {}
    const d = item.d || fakeDayjs
    //...
    return <View key={`day${index}`}>{d.get('date')}</View>
  })
}
  1. 执行编译
  2. 得到结果:
VM8072:1 TypeError: Cannot read property 'd' of undefined
    at _calendar.js:167
    at Array.map (<anonymous>)
    at _calendar.js:157
    at Injector._createData (_calendar.js:212)
    at Injector.target.<computed> [as _createData] (index.js:315)
    at Injector.target._createData (index.js:156)
    at Object.createComponent (index.js:1941)
    at _calendar.js:286
    at require (WAService.js:1)
    at <anonymous>:3318:9
  1. 查看错误栈第一项定位到如下代码:
item = item.$original || {};
var d = item.$original.d || fakeDayjs;

可以看见 item 的值被代理到了 item.$original 上面,而对 item 进行空值处理的时候并不会影响到 item.$original,导致后面的 item.$original.d 会报错。

不知道这个是 BUG 还是某种机制(和 Mobx 有关?),如果是机制,应该如何处理?
现在写作:

item.$original = item.$original || {}

可以临时解决这个问题

期望行为
希望能够正确的引用 item 参数,不用写成 item.$orignal 这种实在是不优雅的形式

系统信息

  • 操作系统: macOS 10.14.2
  • Taro 版本 Taro CLI 1.3.12
  • Node.js 版本 12.6.0
  • 报错平台 weapp
@taro-bot
Copy link

taro-bot bot commented Aug 15, 2019

欢迎提交 Issue~

如果你提交的是 bug 报告,请务必遵循 Issue 模板的规范,尽量用简洁的语言描述你的问题,最好能提供一个稳定简单的复现。🙏🙏🙏

如果你的信息提供过于模糊或不足,或者已经其他 issue 已经存在相关内容,你的 issue 有可能会被关闭。

Good luck and happy coding~

@taro-bot
Copy link

taro-bot bot commented Aug 15, 2019

CC @yuche

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants