使用 SectionList 时无法读取未定义的 属性 'length'
Cannot read property 'length' of undefined when using SectionList
我打电话给 api 来获取我的 movieData
API: https://obscure-reaches-65656.herokuapp.com/api/getCloseTime?city=Hsinchu&sTime=18&eTime=21
我认为 SectionList
的数据是正确的,数据是一个包含很多对象的数组,但我仍然得到错误:
Cannot read property 'length' of undefined
不知道如何解决数据问题?
这里是console.log(movieData);
:
这是关于我的 class 组件渲染:
render() {
const movieData = this.props.searchTime;
if (this.props.loading) {
return <Spinner text='Loading...' />;
}
console.log('movieData =>');
console.log(movieData);
return (
<View>
<SectionList
renderSectionHeader={this.sectionComp}
renderItem={this.renderSectionItem}
sections={movieData}
ItemSeparatorComponent={() => <View><Text></Text></View>}
ListHeaderComponent={() => <View style={{ backgroundColor: '#25B960', alignItems: 'center', height: 30 }}><Text style={{ fontSize: 18, color: '#ffffff' }}>Header</Text></View>}
ListFooterComponent={() => <View style={{ backgroundColor: '#25B960', alignItems: 'center', height: 30 }}><Text style={{ fontSize: 18, color: '#ffffff' }}>Footer</Text></View>}
/>
</View>
);
}
}
如果我设置测试数据 testSections
而不是 movieData
它的工作。
const testSections = [
{ key: "A", data: [{ title: "test1-1" }, { title: "test1-2" }, { title: "test1-3" }] },
{ key: "B", data: [{ title: "test2-1" }, { title: "test2-2" }, { title: "test2-3" }, { title: "test2-4" }, { title: "test2-5" }] },
{ key: "C", data: [{ title: "test3-2" }, { title: "test3-2" }] },
{ key: "W", data: [{ title: "test4-1" }, { title: "test4-2" }, { title: "test4-3" },{ title: "test4-4" }, { title: "test4-5" }, { title: "4-6" }] },
];
我的自定义渲染函数是这样的:
renderSectionItem = (info) => {
console.log('what is _renderItem info =>');
console.log(info);
const txt = ' ' + info.item.theaterCn;
return <Text
style={{ height: 60, textAlignVertical: 'center', backgroundColor: "#ffffff", color: '#5C5C5C', fontSize: 15 }}>{txt}</Text>
}
sectionComp = (info) => {
console.log('what is _sectionComp info =>');
console.log(info);
const txt = info.section.key;
return <Text
style={{ height: 50, textAlign: 'center', textAlignVertical: 'center', backgroundColor: '#9CEBBC', color: 'white', fontSize: 30 }}>{txt}</Text>
}
我不知道为什么。
如有任何帮助,我们将不胜感激。提前致谢。
数据结构movieData
不正确,SectionList
需要一个对象数组,其中每个对象应该有title
和data
属性,取查看文档 here。因此,根据您的 movieData
,您需要将值转换为该结构,例如
示例
首先,将获取的数据转换成合适的结构
fetch('https://obscure-reaches-65656.herokuapp.com/api/getCloseTime?city=Hsinchu&sTime=18&eTime=21')
.then(r => r.json())
.then(r => {
const movieData = r.reduce((r,s) => {
r.push({title: s.theater, data: s.movie});
return r;
}, []);
this.setState({ movieData });
});
转换数据后,只需将其传递给 SectionList
<SectionList
renderItem={({item, index, section}) => <Text key={index}>{item.enName}</Text>}
renderSectionHeader={({section: {title}}) => (
<Text style={{fontWeight: 'bold'}}>{title}</Text>
)}
sections={this.state.movieData}
keyExtractor={(item, index) => item.enName + index}
/>
希望这会有所帮助!
我遇到了同样的错误:
无法从 deltaPatcher.js
读取未定义长度的 属性
我的解决方案是使用 React Native Debugger 而不是浏览器控制台。
只是放下它,所以它可能对某人有帮助。
我打电话给 api 来获取我的 movieData
API: https://obscure-reaches-65656.herokuapp.com/api/getCloseTime?city=Hsinchu&sTime=18&eTime=21
我认为 SectionList
的数据是正确的,数据是一个包含很多对象的数组,但我仍然得到错误:
Cannot read property 'length' of undefined
不知道如何解决数据问题?
这里是console.log(movieData);
:
这是关于我的 class 组件渲染:
render() {
const movieData = this.props.searchTime;
if (this.props.loading) {
return <Spinner text='Loading...' />;
}
console.log('movieData =>');
console.log(movieData);
return (
<View>
<SectionList
renderSectionHeader={this.sectionComp}
renderItem={this.renderSectionItem}
sections={movieData}
ItemSeparatorComponent={() => <View><Text></Text></View>}
ListHeaderComponent={() => <View style={{ backgroundColor: '#25B960', alignItems: 'center', height: 30 }}><Text style={{ fontSize: 18, color: '#ffffff' }}>Header</Text></View>}
ListFooterComponent={() => <View style={{ backgroundColor: '#25B960', alignItems: 'center', height: 30 }}><Text style={{ fontSize: 18, color: '#ffffff' }}>Footer</Text></View>}
/>
</View>
);
}
}
如果我设置测试数据 testSections
而不是 movieData
它的工作。
const testSections = [
{ key: "A", data: [{ title: "test1-1" }, { title: "test1-2" }, { title: "test1-3" }] },
{ key: "B", data: [{ title: "test2-1" }, { title: "test2-2" }, { title: "test2-3" }, { title: "test2-4" }, { title: "test2-5" }] },
{ key: "C", data: [{ title: "test3-2" }, { title: "test3-2" }] },
{ key: "W", data: [{ title: "test4-1" }, { title: "test4-2" }, { title: "test4-3" },{ title: "test4-4" }, { title: "test4-5" }, { title: "4-6" }] },
];
我的自定义渲染函数是这样的:
renderSectionItem = (info) => {
console.log('what is _renderItem info =>');
console.log(info);
const txt = ' ' + info.item.theaterCn;
return <Text
style={{ height: 60, textAlignVertical: 'center', backgroundColor: "#ffffff", color: '#5C5C5C', fontSize: 15 }}>{txt}</Text>
}
sectionComp = (info) => {
console.log('what is _sectionComp info =>');
console.log(info);
const txt = info.section.key;
return <Text
style={{ height: 50, textAlign: 'center', textAlignVertical: 'center', backgroundColor: '#9CEBBC', color: 'white', fontSize: 30 }}>{txt}</Text>
}
我不知道为什么。
如有任何帮助,我们将不胜感激。提前致谢。
数据结构movieData
不正确,SectionList
需要一个对象数组,其中每个对象应该有title
和data
属性,取查看文档 here。因此,根据您的 movieData
,您需要将值转换为该结构,例如
示例
首先,将获取的数据转换成合适的结构
fetch('https://obscure-reaches-65656.herokuapp.com/api/getCloseTime?city=Hsinchu&sTime=18&eTime=21')
.then(r => r.json())
.then(r => {
const movieData = r.reduce((r,s) => {
r.push({title: s.theater, data: s.movie});
return r;
}, []);
this.setState({ movieData });
});
转换数据后,只需将其传递给 SectionList
<SectionList
renderItem={({item, index, section}) => <Text key={index}>{item.enName}</Text>}
renderSectionHeader={({section: {title}}) => (
<Text style={{fontWeight: 'bold'}}>{title}</Text>
)}
sections={this.state.movieData}
keyExtractor={(item, index) => item.enName + index}
/>
希望这会有所帮助!
我遇到了同样的错误:
无法从 deltaPatcher.js
读取未定义长度的 属性我的解决方案是使用 React Native Debugger 而不是浏览器控制台。
只是放下它,所以它可能对某人有帮助。