【问题标题】:Unable to Render a FlatList无法呈现平面列表
【发布时间】:2021-02-09 00:30:28
【问题描述】:

我正在尝试渲染 FlatList,但在屏幕上看不到它

我通过控制台日志获得了我的 Reducer 的数据,并且在控制台中我得到了正确的数据:

User {
  "apellido": "Alas",
  "correo": "prueba@uno.com",
  "id": 2021-02-08T23:52:58.855Z,
  "nombre": "Rene",
  "telefono": "72457183",
}

这是我的代码:

import React from "react";
import { View, Text, FlatList, StyleSheet } from "react-native";
import { useSelector } from 'react-redux';

import UserItem from "../components/UserItem";

export default function Page2() {
    const users = useSelector(state => state.registro.availableUsers);

    console.log(users);

    if (users.length === 0) {
        return <View style={styles.centered} >
            <Text>No Existen Usuarios</Text>
        </View>
    }

    return (
        <FlatList
        data={users}
        keyExtractor={item => item.id.toString()}
        renderItem={
            itemData => <UserItem
                nombre={itemData.item.nombre}
                apellido={itemData.item.apellido}
                telefono={itemData.item.telefono}
                coreo={itemData.item.coreo}
                onSelect={() => { }}
            />
        }
    />
    )
};

const styles = StyleSheet.create({
    container: {
        backgroundColor: '#f9fafd',
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        padding: 20,
    }
});

如您所见,控制台日志显示有从 Reducer 接收到的数据,但没有通过 FlatList 显示数据

如图所示

我尝试使用 MAP 函数获得相同的结果(呈现列表),但仍然出现错误:

TypeError: undefined is not a function (near '...users.map...')

虽然我知道不应该有未定义的,因为有打印到控制台

有什么想法吗?

附言。我认为问题可能出在 Action 或 Reducer 上:

动作

//Import Model
import { createStore } from 'redux';
import User from '../../models/user';

//Constant Creation 
export const REGISTER = 'REGISTER';

export const createUser = (nombre, apellido, telefono, correo) => {
    return async (dispatch) => {
        console.log('entra a fun');
        try{
            console.log('antes de crear');
            const createdUser = new User(new Date(), nombre, apellido, telefono, correo);
            console.log('despues de crear');
            console.log(createUser);

            dispatch({type: REGISTER, user: createdUser});
        }
        catch (err) {
            throw err;
        }
    }
};

减速器

import { REGISTER } from '../actions/registro';

const initialState = {
    availableUsers: [],
}

export default (state = initialState, action) => {
    switch (action.type) {
        case REGISTER:
            return {
                ...state,
                availableUsers: action.user,
            };
    }
    return state;
};

【问题讨论】:

  • 仅供参考,ID 只是 DATE() 函数,只需要一个 ID
  • 您在第一个 console.log 示例中发布的内容只是一个用户——您确定它是一组用户吗?
  • 我刚刚测试了一个用户,但它是一个数组
  • 好的 -- 只是问一下,因为您的 TypeError 建议不同 -- map 将在不是数组的东西上未定义。
  • 我明白你的意思,我认为这可能是我的 Action 或 Reducer:

标签: javascript react-native react-native-flatlist


【解决方案1】:

您的可用用户只是获得一个用户,而不是更新/附加新用户。

export default (state = initialState, action) => {
    switch (action.type) {
        case REGISTER:
            return {
                ...state,
                availableUsers: [...state.availableUsers, action.user],
            };
    }
    return state;
};

通过传播 (...) state.availableUsers,您可以将新用户附加到现有数组的末尾。

【讨论】:

  • 它现在可以工作了,这可能太多了,但是如果我需要删除减速器中的这些项目之一,有什么想法吗?
  • 你的意思是删除其中一个用户?
  • 是的,我需要通过 id 删除 availableUsers 数组中的用户
  • 类似availableUsers: state.availableUsers.filter(item =&gt; item.id !== action.id) 的东西(我正在假设User 的结构以及Action 的定义方式)。
猜你喜欢
  • 2019-05-27
  • 2019-11-06
  • 2022-12-15
  • 2021-09-09
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
相关资源
最近更新 更多