React native无法显示平面列表

时间:2018-06-14 10:28:48

标签: react-native react-native-flatlist

我想显示我创建的FlatList。我想显示我的数据中的标题和艺术家。没有错误,但我的输出不会出现任何错误。

这是我的数据:

var track =   
[ 
 { List: 'list1', 
   data: 
   [
   {id: '1', url: 'http://tegos.kz/new/mp3_full/Luis_Fonsi_feat._Daddy_Yankee_-_Despacito.mp3',title: 'Despacito',artist:'Luis Fonsi'},
   {id: '2', url: 'http://tegos.kz/new/mp3_full/5_Seconds_Of_Summer_-_Youngblood.mp3',title: 'YoungBlood',artist:'5SOS'},
 ]
},
 { List: 'list2', 
  data: 
[
  {id: '1111', url: 'http://tegos.kz/new/mp3_full/Yellow_Claw_and_San_Holo_-_Summertime.mp3',title: 'Summertime',artist:'Yelow Claw'},
  {id: '2222', url: 'http://tegos.kz/new/mp3_full/Post_Malone_-_Better_Now.mp3',title: 'Better Now',artist:'Post Malone'},
]},
];

module.exports = {track:track};

这是我的FlatList

export default class SongList extends Component{
render(){
const { navigate } = this.props.navigation;
return(
    <View>
    <FlatList
    data={track}
    renderItem={({item,index})=>{
        return(
            <FlatListItem item={item} index={index}>

            </FlatListItem>);
    }}
    >
    </FlatList>
    </View>
);
 }
 }

class FlatListItem extends Component{
render(){

    return(
        <View style={styles.list}>
        <View>

        <Text style={styles.itemTitle}>{this.props.item.title}</Text>
        <Text style={styles.itemArtist}>{this.props.item.artist}</Text>
        </View>
        </View>
    );
}

}

基本上我可以运行该程序。但是屏幕上没有显示任何内容。背景只有空白。

const styles = StyleSheet.create({  
itemArtist:{
    textAlign: 'center',
    justifyContent: 'center',
    fontSize: 23,
    borderBottomWidth: 4,
    borderBottomColor: '#ccc',
    marginTop: 10,
    padding: 10,
    color: 'blue',
},
itemTitle:{
    textAlign: 'center',
    justifyContent: 'center',
    fontSize: 23,
    borderBottomWidth: 4,
    borderBottomColor: '#ccc',
    marginTop: 10,
    padding: 10,
    color: 'blue',
},
list:{
    flex:1,
}

2 个答案:

答案 0 :(得分:1)

您应该编写如下代码:

您的数据:

export default [
  {
    List: 'list1',
    data: [
      {
        id: '1',
        url: 'http://tegos.kz/new/mp3_full/Luis_Fonsi_feat._Daddy_Yankee_-_Despacito.mp3',
        title: 'Despacito',
        artist: 'Luis Fonsi',
      },
      {
        id: '2',
        url: 'http://tegos.kz/new/mp3_full/5_Seconds_Of_Summer_-_Youngblood.mp3',
        title: 'YoungBlood',
        artist: '5SOS',
      },
    ],
  },
  {
    List: 'list2',
    data: [
      {
        id: '1111',
        url: 'http://tegos.kz/new/mp3_full/Yellow_Claw_and_San_Holo_-_Summertime.mp3',
        title: 'Summertime',
        artist: 'Yelow Claw',
      },
      {
        id: '2222',
        url: 'http://tegos.kz/new/mp3_full/Post_Malone_-_Better_Now.mp3',
        title: 'Better Now',
        artist: 'Post Malone',
      },
    ],
  },
];

像这样导入你的数据,我假设数据文件和你的代码在同一个文件夹中:

import track from './data';

您的组件:

export default class App extends Component {
  render() {
    const { navigate } = this.props.navigation;
    return (
      <View>
        <FlatList
          data={track}
          renderItem={({ item, index }) => {
            return <FlatListItem item={item} index={index} />;
          }}
        />
      </View>
    );
  }
}

class FlatListItem extends Component {
  render() {
    return (
      <View style={styles.list}>
        <View>
          <Text style={styles.itemTitle}>{this.props.item.data[0].title}</Text>
          <Text style={styles.itemArtist}>{this.props.item.data[0].artist}</Text>
        </View>
        <View>
          <Text style={styles.itemTitle}>{this.props.item.data[1].title}</Text>
          <Text style={styles.itemArtist}>{this.props.item.data[1].artist}</Text>
        </View>
      </View>
    );
  }
}

如果您只想在FlatList中显示list1的数据,则应更改以下代码:

export default class App extends Component {
  render() {
    const { navigate } = this.props.navigation;
    return (
      <View>
        <FlatList
          data={track[0].data}
          renderItem={({ item, index }) => {
            return <FlatListItem item={item} index={index} />;
          }}
        />
      </View>
    );
  }
}

class FlatListItem extends Component {
  render() {
    return (
      <View style={styles.list}>
        <View>
          <Text style={styles.itemTitle}>{this.props.item.title}</Text>
          <Text style={styles.itemArtist}>{this.props.item.artist}</Text>
        </View>
      </View>
    );
  }
}

您可以更好地制作数据架构,以便更好地展示它们。

答案 1 :(得分:0)

调试步骤: -

  1. 尝试控制轨道,检查数据是否正常运行。
  2. 在componentDidMount中添加控制台,并检查项目是否存在。
  3. 在flatlist中添加keyExtractor,keyExtractor告诉列表使用react键而不是默认键属性。
  4. &#13;
    &#13;
      <FlatList
            data={track}
            keyExtractor={(item, index) => ""+index}
            renderItem={({ item, index }) => {
            return <FlatListItem item={item} index={index} />;
          }}
          />
    &#13;
    &#13;
    &#13;