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.
相关产品推荐
相关产品推荐

