You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native FlatList无法显示JSON数据问题求助

解决FlatList显示空白但点击可跳转的问题

嘿,我帮你定位到了问题的核心,两个小调整就能让你的列表正常显示数据:

问题1:renderItem未渲染数据内容

你的FlatList已经正确获取到了JSON数据,也能响应点击跳转,但列表项看起来空白,是因为renderItem方法里的TouchableOpacity容器没有任何展示数据的组件——相当于你只做了可点击的“空盒子”,但没把内容放进去。

问题2:重复定义keyExtractor

你连续写了两次keyExtractor,后面的定义会覆盖前面的。用name作为key存在风险(可能有重复名称的项),而接口返回的id是唯一值,更适合作为列表项的key。


修改后的代码

修复renderItem和keyExtractor的RenderList组件:

class RenderList extends Component {
  static navigationOptions = {
    title: 'Selected Item',
    header: null,
  };
  constructor() {
    super();
    this.state = {
      data: null,
      loading: true,
      search: '',
    };
  }
  componentDidMount() {
    this.createViewGroup();
  }
  createViewGroup = async () => {
    try {
      const response = await fetch(
        'http:///Dsenze/userapi/grouphier/viewgroup', // 注意这里的URL可能需要补全域名
        {
          method: 'POST',
          headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
          },
          body: JSON.stringify({
            password: 'admin',
            username: 'admin',
            viewall: 'false',
            id: [4],
            startlimit: '0',
            valuelimit: '10',
          }),
        }
      );
      const responseJson = await response.json();
      const { groupData } = responseJson;
      this.setState({
        data: groupData,
        loading: false,
      });
    } catch (e) {
      console.error(e);
    }
  };
  clickedItemText(clickedItem) {
    this.props.navigation.navigate('Item', { item: clickedItem });
  }
  updateSearch = search => {
    this.setState({ search });
  };
  // 只保留一个keyExtractor,用唯一的id作为key
  keyExtractor = ({ id }) => id.toString();
  
  // 修改renderItem,添加Text组件展示数据
  renderItem = ({ item }) => (
    <TouchableOpacity style={styles.item} activeOpacity={0.4} onPress={() => {
      this.clickedItemText(item);
    }}>
      {/* 这里渲染item的name字段,你也可以根据需要添加其他数据 */}
      <Text style={styles.text}>{item.name}</Text>
    </TouchableOpacity>
  );
  render() {
    const { loading, data } = this.state;
    return (
      <ScrollView>
        <View style={styles.container1}>
          {loading ? (
            <ActivityIndicator size="large" />
          ) : (
            <FlatList data={data} renderItem={this.renderItem} keyExtractor={this.keyExtractor} />
          )}
        </View>
      </ScrollView>
    );
  }
}

额外提示

你代码里的请求URL http:///Dsenze/userapi/grouphier/viewgroup 看起来缺少域名部分(比如http://your-domain.com/Dsenze/...),如果实际运行中请求失败,记得检查这个URL是否正确。

内容的提问来源于stack exchange,提问作者Abhigyan Gaurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:58:24