Touchable类型的组件的子组件为复合类型时出现的错误解决
2016-08-27 21:05
274 查看
先上代码
//渲染方法 renderRow(rowData,sectionID,rowID,highlightRow) { return ( <TouchableHighlight onPress={() => { this._rowPressed(sectionID, rowID); } } style={{}} underlayColor='red'> <IndexListViewItem rowData={rowData} sectionID={sectionID} rowID={rowID}/> </TouchableHighlight> ); } //IndexListViewItem自定义组件 'use strict'; import React, { Component } from 'react'; import { StyleSheet, View, Text, } from 'react-native'; class IndexListViewItem extends Component { render() { return ( <View style={{flexDirection: 'row',justifyContent: 'center',backgroundColor: '#F6F6F6',}}> <Text style={{fontSize: 18}}> {this.props.rowData} </Text> </View> ); } } const styles = StyleSheet.create({ }); export default IndexListViewItem;
这里直接运行会报错:touchable child must either be native or forward setnativeprops to a native component。
总结出错的原因是,Touchable类型的组件会自动给子组件传递一些props,但是这些props只支持原生组件,如果是自定义的复合组件就会出问题。就好像你给自定义的复合组件直接设置style,那这个style到底是设置到复合组件的哪个子组件上呢?就会有问题,解决办法就是在自定义的复合组件里使用setNativeProps方法把Touchable设置的props传递给自定义复合组件内部的原生子组件。1、在子组件内部添加如下代码
setNativeProps(nativeProps) { this._root.setNativeProps(nativeProps); }
2、在子组件内部的第一个子原生组件中添加如下属性
ref={component => this._root = component}
3、如果Touchable类型是TouchableOpacity,还需要在子组件内部添加如下代码,用来传递props
{...this.props} //新语法,相当于取出所有的props
PS、为什么要添加第三条还没搞太明白,希望有高手能指教一下
相关文章推荐
- ServiceMix 中使用file组件时出现无效的property的错误问题的解决
- 向ACCESS中的"时间/日期"字段中插入DateTime.Now时出现“标准表达式中数据类型不匹配。”错误的解决办法
- 解决WebService部署时出现的“未能创建类型...”错误
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。8000401A的错误解决方法
- 解决WebService部署时出现的“未能创建类型...”错误
- C#在调用office的PowerPoint时出现 对 COM 组件的调用返回了错误 HRESULT E_FAIL。解决办法。
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。8000401A的错误解决方法
- 检索 COM 类工厂中 CLSID 为{...} 的组件时失败,出现以下错误: 80070005、8000401A的错误解决方法
- mvc area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法
- 解决 JScript 中使用日期类型数据时出现类型错误的问题
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。8000401A的错误解决方法
- 向ACCESS中的"时间/日期"字段中插入DateTime.Now时出现“标准表达式中数据类型不匹配。”错误的解决办法
- 解决,从 IClassFactory 为 CLSID 为 的 COM 组件创建实例失败,原因是出现以下错误: 80004005
- 解决 JScript 中使用日期类型数据时出现类型错误的问题
- Asp.net中建立MS office组件时出现“拒绝访问”和“消息筛选器显示应用程序正在使用中”错误的解决方法
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。8000401A的错误解决方法
- 从 IClassFactory 为 CLSID 为 {00024500-0000-0000-C000-000000000046} 的 COM 组件创建实例失败,原因是出现以下错误: 8001010a解决办法
- RTX Server SDK发提醒 解决:检索 COM 类工厂中 CLSID 为的组件时失败,原因是出现以下错误: 80070005
- MVC area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法
- 在配置windows2003域控时出现“未授予用户在此计算机上的请求登录类型”错误提示的解决方法