React native 反应本机:未显示平面列表
我正在尝试制作一个自定义组件,如果第一个选项不够清晰,它将显示新选项的选项。我正在使用React native 反应本机:未显示平面列表,react-native,react-native-flatlist,React Native,React Native Flatlist,我正在尝试制作一个自定义组件,如果第一个选项不够清晰,它将显示新选项的选项。我正在使用FlatList组件来显示数据,它似乎没有显示作为道具提供的数据 这是组件的渲染功能 import { Header, List, ListItem } from "react-native-elements"; import PickerBox from "./PickerBox"; render() { return ( <View> <Header
FlatList
组件来显示数据,它似乎没有显示作为道具提供的数据
这是组件的渲染
功能
import { Header, List, ListItem } from "react-native-elements";
import PickerBox from "./PickerBox";
render() {
return (
<View>
<Header
centerComponent={{
text: "By " + this.state.newTaxon + ", did you mean...",
style: { color: "white", fontSize: 20, textAlign: "center" }
}}
backgroundColor="black"
/>
<FlatList
data = {this.state.dataSource}
renderItem = {({item}) => {
<PickerBox
title = {item.c_syn_name}
/>
}}
keyExtractor = {(item) => item.c_syn_name}
/>
</View>
);
}
import PickerBox from "./PickerBox"; // reside in same folder
这是组件中PickerBox的导入语句
import { Header, List, ListItem } from "react-native-elements";
import PickerBox from "./PickerBox";
render() {
return (
<View>
<Header
centerComponent={{
text: "By " + this.state.newTaxon + ", did you mean...",
style: { color: "white", fontSize: 20, textAlign: "center" }
}}
backgroundColor="black"
/>
<FlatList
data = {this.state.dataSource}
renderItem = {({item}) => {
<PickerBox
title = {item.c_syn_name}
/>
}}
keyExtractor = {(item) => item.c_syn_name}
/>
</View>
);
}
import PickerBox from "./PickerBox"; // reside in same folder
dataSource
状态来自一个JSON对象,该对象在每个条目中都包含类似的布局
"c_node_name_scientific": "Centurio",
"c_syn_name": "wrinkle-faced bat",
"i_node_id": 27644,
模拟器中的输出只是标题,但预期的输出是标题,下面有列表。您可以试试这个
renderItem={({item})=>{
选择器箱(项目c\U syn\U名称);
}}
首先,请确保此.state.dataSource
不是空数组。
如果您的数据源是这样的,那么这应该可以工作:
<FlatList
data={[{c_syn_name: 'a'}, {c_syn_name: 'b'}]}
keyExtractor = {item => item.c_syn_name}
renderItem={({item}) =><PickerBox title = {item.c_syn_name} />}
/>
item.c\u syn\u name}
renderItem={({item})=>}
/>
首先,您需要确保,如果您的renderItem
方法像示例中那样使用带花括号的胖箭头函数,则需要添加一个return语句,如下所示:
renderItem={({item}) => { return <PickerBox title={item.c_syn_name} /> }}
如果是这种情况,只需将状态的数据源
对象包装在一个数组中,如上所示
如果要将数据作为类似以下内容的对象传入:
[
{
"c_node_name_scientific": "Centurio",
"c_syn_name": "wrinkle-faced bat",
"i_node_id": 27644
},
{
"c_node_name_scientific": "xxx",
"c_syn_name": "xxx",
"i_node_id": 123
},
//...
]
{
key1: {title: 'Title 1'},
key2: {title: 'Title 2'}
key3: {title: 'Title 3'}
}
您需要执行以下操作,以使数据可访问平面列表:
<FlatList
data={Object.keys(this.state.dataSource)} // will result in ["key1", "key2", "key3"]
renderItem={({item}) =>
// here `item` will be the Object's key. eg: "key1"
<PickerBox title={this.state.dataSource[item].title} />
}
/>
//这里的'item'将是对象的键。例如:“键1”
}
/>
最后,如果平面列表需要随着状态更新而更新,则需要将propextraData={this.State}
添加到平面列表中。根据:
通过将extraData={this.state}传递给FlatList,我们可以确保在state.selected更改时,FlatList本身将重新呈现。如果不设置此道具,FlatList将不知道需要重新渲染任何项目,因为它也是一个PureComponent,道具比较不会显示任何更改
对我来说,问题是父元素有flex:1。
删除它解决了我的问题请在PickerBoxI中添加样式我已经添加了样式。对于第一部分,如果我删除大括号或在大括号中添加return语句。我将收到一个错误消息,说明控制台。错误:`“未处理的JS异常:不变冲突:对象作为React子对象无效(找到:具有键{title}的对象)。如果要呈现子对象集合,请使用数组。`如果忽略大括号,则会收到警告消息,提示列表中的每个子对象都应具有唯一的键属性,并且不会呈现任何内容。@dp请删除大括号,并用括号替换。()就关键问题而言,请查看将道具添加到平面列表,并使用类似以下内容的
item.i\u node\u id}/>