You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native数组映射PickerItem报错:Cannot read property 'displayName' of undefined

解决React Native 0.51.0中动态生成Picker.item的displayName错误

嘿,我刚好碰到过React Native这个版本的类似问题!你遇到的TypeError: Cannot read property 'displayName' of undefined,本质是因为在0.51.0版本里,动态生成Picker.item时,React没办法正确识别这个组件的身份。

问题原因

你直接在map回调里写<Picker.item>的时候,JSX解析器没办法正确获取到这个静态属性组件的displayName——虽然直接写死的<Picker.item>能正常运行,但动态生成时的解析逻辑不一样,就触发了这个错误。另外,你还漏掉了React列表渲染必须的key属性,这也是个需要补上的点。

两种可行的解决方案

方案1:先提取Picker.item到变量再使用

把Picker.item赋值给一个局部变量,再在map里用这个变量渲染组件,这样React就能正确识别它了:

renderPickerItems() {
  // 先把Picker.item提取为一个独立变量
  const PickerItem = Picker.item;
  return ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].map((day, index) => (
    <PickerItem 
      key={index} // 必须添加唯一key,这里用index或者day本身都可以
      label={day} 
      value={day} 
    />
  ));
}

方案2:使用标准的Picker.Item(大写I)

其实React Native的Picker组件标准静态属性是Picker.Item(注意大写的I),旧版本可能兼容小写的item,但动态生成时用标准写法更稳妥:

renderPickerItems() {
  return ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].map((day) => (
    <Picker.Item 
      key={day} // 因为每个day都是唯一的,直接用day当key更合适
      label={day} 
      value={day} 
    />
  ));
}

额外提示

不管用哪种方案,一定要给列表里的每个组件加上唯一的key属性——这不仅能消除React的警告,还能提升列表渲染的性能。如果你的day值都是唯一的,直接用key={day}比用index更好。

内容的提问来源于stack exchange,提问作者Fares K. A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:00:17