我正在使用反应本地手风琴的可折叠列表视图。我的代码是下风箱。它的工作,但它给两个警告:
警告:失败的propType:提供给Accordion的prop内容无效,应为单个元素。检查StaticRenderer的渲染方法。
警告:数组或迭代器中的每个子级都应具有唯一的“键”属性。检查手风琴的渲染方法。它是从一个孩子那里传来的。
知道怎么修吗?或者有什么更好的方法为每个标题提供多个内容?(折叠列表视图与儿童)
class Courses extends Component {
constructor(props) {
super(props);
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
}),
loaded: false,
};
this.rowPressed = this.rowPressed.bind(this);
}
rowPressed(data) {
console.log('row press');
}
fetchData() {
/// fetching data .....
}
componentDidMount() {
this.fetchData();
}
render() {
if (!this.state.loaded) {
return this.renderLoadingView();
}
return (
<View style={{ flex: 1 }}>
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow}
style={styles.listView}
/>
</View>
);
}
renderRow(data) {
var header = (
<View>
<View style={styles.rowContainer}>
<View style={styles.textContainer}>
<Text style={styles.title}>{data.nid}</Text>
<Text style={styles.description} numberOfLines={0}>{data.title}</Text>
</View>
</View>
<View style={styles.separator}/>
</View>
);
///////////
var content = [];
for(var x=0; x < Object.keys(data.course).length; x++){
content.push(
<View style={styles.rowContainer}>
<TouchableHighlight onPress={() => this.rowPressed(data.course[x].course_id).bind(this)} underlayColor='#e3e0d7'>
<Text style={styles.child}>{data.course[x].title}</Text>
</TouchableHighlight>
</View>
);
}
////////////
return (
<Accordion
header={header}
content={content}
easing="easeOutCubic"
/>
);
}
renderLoadingView() {
return (
<View style={styles.loading}>
<Text style={styles.loading}>
Fetching Courses, please wait...
</Text>
</View>
);
}
}
module.exports = Courses;
提前谢谢!
更新:现在第一个错误消失了,但它在一行中显示了数组中的所有行。我尝试添加{'\n'},但没有效果。知道怎么解决吗?还是应该使用样式表?
var content = [];
for(var x=0; x < Object.keys(data.course).length; x++){
content.push(
<TouchableHighlight underlayColor='#e3e0d7'>
<Text style={styles.child}>{data.course[x].title}</Text>
</TouchableHighlight>
);
}
var clist = (
<View style={styles.rowContainer}>
{content}
</View>
);
////////////
return (
<Accordion
header={header}
content={clist}
easing="easeOutCubic"
/>
);
更新2:
添加一个键到触摸突出显示并修复了第二个问题。谢谢
所以我在facebook上看了一个listview的例子,他们就以这个为例。要消除第二个警告,请尝试提供键
属性。此示例在\u renderoperator
函数中提供它
<UIExplorerPage
title={this.props.navigator ? null : '<ListView>'}
noSpacer={true}
noScroll={true}>
<ListView
dataSource={this.state.dataSource}
renderRow={this._renderRow}
renderScrollComponent={props => <RecyclerViewBackedScrollView {...props} />}
renderSeparator={this._renderSeperator}
/>
</UIExplorerPage>
这里是renderSeperator
和它的样子
_renderSeperator: function(sectionID: number, rowID: number, adjacentRowHighlighted: bool) {
return (
<View
key={`${sectionID}-${rowID}`}
style={{
height: adjacentRowHighlighted ? 4 : 1,
backgroundColor: adjacentRowHighlighted ? '#3B5998' : '#CCCCCC',
}}
/>
);
}
});
您可以在这里查看完整的示例https://facebook.github.io/react-native/docs/listview.html
和其他stackoverflow建议在这里警告:数组或迭代器中的每个孩子都应该有一个唯一的“键”道具。检查ListView的渲染方法
至于第一个警告,看起来你的手风琴的内容属性有问题。当它应该只有一个元素时,你给它一个元素数组。尝试将数组包装在一个单一的
因为看起来你的Conent在
<Accordion
header={header}
content={content}
easing="easeOutCubic"
/>
看起来是这样的
`<Content />
<Content />
<Content />
<Content />
<Content />
//etc... one for every row in the array`
我无法测试,因为我没有mac电脑,请确认。
我正在尝试新的react-router 1.0.0,但我收到了无法解释的奇怪警告: 该应用程序很简单: speaker.jsx: jsx只有以下render()函数: 当我输入到#/speaker或#speaker的路由时,除了title之外,什么都不会显示。请帮忙。
我得到这个错误: index.js:1375警告:失败的道具类型:提供给的道具无效。 我在我的应用程序中使用了一个外部组件,它是从github获得的,可以在后台渲染视频。这里是链接。https://github.com/samAbeywickrama/reactjs-videobg 它与proptypes有关,但由于它的遗留和react建议使用flo,所以我根本不使用类型检查。
https://gist.github.com/js08/dfeab2df8b68240297eb > 我正在尝试为jsx文件编写测试用例 在这方面,我能够通过proptypes 但不是在我顺利通过的地方 我在运行测试用例时出错 下面提供我的错误、测试用例和代码 警告:失败的道具类型:提供给的无效道具 我不知道该怎么做 发生在这次活动中 你能告诉我应该如何把它放在我的测试用例中吗 警告:失败的道具
我尝试动态渲染图像。但我得到了这个错误。动态获取图像源并进行渲染的解决方案是什么? 主要组成部分。js 卡片详情。js 我也尝试过其他方法,但没有成功。我在使用此方法时遇到此错误: 未知命名模块 主要组成部分。js 卡片详情。js
我有这个警告在我的项目:警告:失败的道具类型:无效的道具<代码>源代码提供给<代码>图像。我加载图像从sampleProducts.jsonRecommendend.js并通过它作为道具在Products.js,但图像不会加载,因为警告。 样本产品。json 建议。js 产品。js
警告:失败的prop类型:提供给PadView的prop无效。 嗨,我是新来的react native,红色消息一直显示,但一切看起来都很好,应用程序呈现正确,但红色消息一直显示在终端上,你们知道这不是什么意思吗,谢谢你们的帮助。