React Native报错:input组件View config getter callback为undefined排查求助
问题原因
你遇到的报错触发核心是两个不符合React/React Native开发规范的写法:
- 组件命名违反规范:React要求所有自定义组件必须大写开头,你定义的
testMath组件是小写开头,同时导入的input组件也是小写开头,React会默认把小写开头的标签识别为浏览器原生DOM元素,而React Native运行环境没有DOM,所以找不到对应配置触发报错 - 错误混用Web和React Native组件:你在React Native项目中引入了web端的
<input>、<label>标签,这类DOM元素在React Native中不存在对应的原生渲染载体
修复步骤
1. 修复组件命名问题
打开testMath.js,将组件名从testMath修改为大写开头的TestMath:
// 把原有小写的函数名改成大写 export default function TestMath() { // 原有逻辑保持不变 }
同时删除文件中无用的导入:import { ReactDOM } from 'react';和未使用的Image组件。
2. 修复Questions.js的错误写法
- 首先删除错误导入:
import {input} from "react-native-web"; - 替换web原生标签为React Native对应组件:如果需要实现复选框功能,先安装官方维护的复选框组件:
执行安装命令:npm install @react-native-community/checkbox - 调整选项渲染逻辑,替换原有
<input>和<label>的写法,同时给所有循环渲染的元素添加唯一key属性,修改后的核心代码如下:
import CheckBox from '@react-native-community/checkbox'; import { View, Text, StyleSheet, Pressable } from 'react-native'; export default function Questions({ data }) { let questions = data.questions questions = questions.map(function(el, index){ let variants = el.variants.map(function(e, i) { return ( <Pressable key={i} style={{flexDirection: 'row', alignItems: 'center', marginVertical: 5, paddingHorizontal: 20}}> <CheckBox value={false} // 后续可自行接入选中状态逻辑 onValueChange={(newValue) => { // 处理选中逻辑 }} /> <Text style={{marginLeft: 10}}> {e.title || e.text} </Text> </Pressable> ) }) return ( <View key={index}> <Text style={styles.questionHead}> {el.title} </Text> <Text style={styles.questionExample}>{el.code} </Text> {variants} </View> ) }) return ( <View> <Text style={styles.testTeme}> {data.testName} </Text> {questions} </View> ) } // 原有样式保持不变
3. 修复数据字段不统一问题
你的data.js中前三条问题的选项用的是title字段,最后一条问题的选项用的是text字段,会导致最后一题的选项内容渲染空白,建议统一为相同字段名。
完成以上修改后重启项目即可解决报错。
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

