undefined 不是对象(评估 '_props[registrationName]')
undefined is not and object (evaluating '_props[registrationName]')
本机反应:0.43.3
问题只出现在Android系统,iOS没问题。
当我触摸一个 TouchableOpacity 组件时,onTouch 函数不会被执行。
有人发现这个问题吗?
我用 RN 建立了一个日历。问题是,当我在 Android 设备或模拟器上单击 Day 单位时,我会收到错误 undefined is not and object (evaluating '_props[registrationName]')。但是在 iOS 设备和模拟器上点击它是可以的。 Day组件的代码是这样的:
<TouchableOpacity style={styles.calendarRowUnit} onPress={() => this.props.onSelect(this.props.date)}>
<View style={dateWrapperStyle}>
<Text style={dateTextStyle}>{dateString}</Text>
</View>
</TouchableOpacity>
以及错误图片:
error info iamge
我发现只有在触摸文本区域时才会出现错误。
我不知道这是本机错误还是我的错。在我将 react-native 版本更新到 0.43.3 之前,这个错误从未发生过。
/**
* @param {object} inst The instance, which is the source of events.
* @param {string} registrationName Name of listener (e.g. `onClick`).
* @return {?function} The stored callback.
*/
getListener: function(inst, registrationName) {
var listener;
// TODO: shouldPreventMouseEvent is DOM-specific and definitely should not
// live here; needs to be moved to a better place soon
if (typeof inst.tag === 'number') {
const props = EventPluginUtils.getFiberCurrentPropsFromNode(
inst.stateNode
);
if (!props) {
// Work in progress.
return null;
}
listener = props[registrationName];
if (shouldPreventMouseEvent(registrationName, inst.type, props)) {
return null;
}
} else {
if (typeof inst._currentElement === 'string') {
// Text node, let it bubble through.
return null;
}
if (!inst._rootNodeID) {
// If the instance is already unmounted, we have no listeners.
return null;
}
const props = inst._currentElement.props;
listener = props[registrationName];
if (shouldPreventMouseEvent(registrationName, inst._currentElement.type, props)) {
return null;
}
}
invariant(
!listener || typeof listener === 'function',
'Expected %s listener to be a function, instead got type %s',
registrationName,
typeof listener
);
return listener;
},
目前有一个错误,如果 TouchableOpacity 中的 Text
有一个 number
,它会出错。目前修复它的方法是将 number
转换为 string
,它将触发字符串检查并适当地抛出一个空值。
前:
之前:<Text>16</Text>
之后:<Text>String(16)</Text>
#12905 <Text />
中存在错误,此错误是 RN 0 特有的。43.x 并已在更高版本中修复。错误是,只要 <Text />
中有数字,就会导致此错误。
解决办法是:
- 使用最新版本升级 React Native。
- 将值类型转换为
string
。
例如,
<Text> {100} </Text>
到 <Text> {''100} </Text>
<Text> {100} </Text>
到 <Text> {String(100)} </Text>
<Text> {100} </Text>
到 <Text> {(100).toString} </Text>
本机反应:0.43.3
问题只出现在Android系统,iOS没问题。 当我触摸一个 TouchableOpacity 组件时,onTouch 函数不会被执行。
有人发现这个问题吗?
我用 RN 建立了一个日历。问题是,当我在 Android 设备或模拟器上单击 Day 单位时,我会收到错误 undefined is not and object (evaluating '_props[registrationName]')。但是在 iOS 设备和模拟器上点击它是可以的。 Day组件的代码是这样的:
<TouchableOpacity style={styles.calendarRowUnit} onPress={() => this.props.onSelect(this.props.date)}>
<View style={dateWrapperStyle}>
<Text style={dateTextStyle}>{dateString}</Text>
</View>
</TouchableOpacity>
以及错误图片: error info iamge
我发现只有在触摸文本区域时才会出现错误。 我不知道这是本机错误还是我的错。在我将 react-native 版本更新到 0.43.3 之前,这个错误从未发生过。
/**
* @param {object} inst The instance, which is the source of events.
* @param {string} registrationName Name of listener (e.g. `onClick`).
* @return {?function} The stored callback.
*/
getListener: function(inst, registrationName) {
var listener;
// TODO: shouldPreventMouseEvent is DOM-specific and definitely should not
// live here; needs to be moved to a better place soon
if (typeof inst.tag === 'number') {
const props = EventPluginUtils.getFiberCurrentPropsFromNode(
inst.stateNode
);
if (!props) {
// Work in progress.
return null;
}
listener = props[registrationName];
if (shouldPreventMouseEvent(registrationName, inst.type, props)) {
return null;
}
} else {
if (typeof inst._currentElement === 'string') {
// Text node, let it bubble through.
return null;
}
if (!inst._rootNodeID) {
// If the instance is already unmounted, we have no listeners.
return null;
}
const props = inst._currentElement.props;
listener = props[registrationName];
if (shouldPreventMouseEvent(registrationName, inst._currentElement.type, props)) {
return null;
}
}
invariant(
!listener || typeof listener === 'function',
'Expected %s listener to be a function, instead got type %s',
registrationName,
typeof listener
);
return listener;
},
目前有一个错误,如果 TouchableOpacity 中的 Text
有一个 number
,它会出错。目前修复它的方法是将 number
转换为 string
,它将触发字符串检查并适当地抛出一个空值。
前:
之前:<Text>16</Text>
之后:<Text>String(16)</Text>
#12905 <Text />
中存在错误,此错误是 RN 0 特有的。43.x 并已在更高版本中修复。错误是,只要 <Text />
中有数字,就会导致此错误。
解决办法是:
- 使用最新版本升级 React Native。
- 将值类型转换为
string
。
例如,
<Text> {100} </Text>
到<Text> {''100} </Text>
<Text> {100} </Text>
到<Text> {String(100)} </Text>
<Text> {100} </Text>
到<Text> {(100).toString} </Text>