【问题标题】:FlatList Render issue in react-navigation反应导航中的 FlatList 渲染问题
【发布时间】:2020-02-01 18:38:52
【问题描述】:

我正在尝试使用 react-navigation 在主屏幕中呈现一个 FlatList 在重新出现此错误消息后:

不变违规:对象作为 React 子级无效(找到:带有键 {screenProps,navigation} 的对象)。如果您打算渲染一组子项,请改用数组。

//App.js
import React from 'react';
import Navigator from './src/Routes/appRoutes';
import { View, Text, StyleSheet } from 'react-native';
import TodoApp from './src/todoApp';
import SingleTodo from './src/components/singleTodo';

const App = () => {
  return (
    <Navigator />
  );
}

const styles = StyleSheet.create(
  {
    container: {
      padding: 40
    }
  }
)
export default App;






//FlatList screen 

import React, { useState } from 'react';
import { View, FlatList } from 'react-native';
import Todos from './components/todos';
import uuid from 'uuid';

const TodoApp = () => {

    const [todo, setTodo] = useState([
        {
            id: uuid(),
            title: "FFFFFFFFF",
            desc: "first description"
        },
        {
            id: uuid(),
            title: "Second title",
            desc: "Second description"
        }
    ]
    )
    return (
        <View>
            <FlatList
                data={todo}
                renderItem={({ item }) =>
                    <Todos title={item.title} desc={item.desc} />}
                keyExtractor={item => item.id}
            />
        </View>
    );
}


export default TodoApp;






//Routes

import { createStackNavigator } from 'react-navigation-stack';
import Todos from './../components/todos';
import SingleTodo from './../components/singleTodo';
import { createAppContainer } from 'react-navigation';
import { Settings } from './../settings';

const screens = {
    Home: {
        screen: Todos
    },
    SingleTodo: {
        screen: SingleTodo
    }
}
const StackScreens = createStackNavigator(screens);

export default createAppContainer(StackScreens);






//Todos screen
import React from 'react';
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native';
import { NavigationNativeContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

const Todos = (props) => {
    console.log(props);
    const { title, desc } = props;
    return (
        <View style={styles.container}>
            <TouchableOpacity onPress={() => props.navigation.navigate('SingleTodoScreen')}>
                <View>{props}</View>
                <Text style={styles.listText}>{title}</Text>
            </TouchableOpacity>
        </View>
    )
}

const styles = StyleSheet.create({
    container: {
        padding: 15,
        color: "#000",
        borderWidth: 1,
        borderColor: "#eee",
    },
    listText: {
        fontSize: 16
    }


});


export default Todos;

【问题讨论】:

    标签: react-native react-native-android react-native-flatlist react-native-navigation


    【解决方案1】:

    您需要从代码中删除以下行

    <View>{props}</View>
    

    props 是一个对象,你不能在你的 JSX 中写包含这个对象。

    所以你的功能组件会是这样的。

    const Todos = (props) => {
        console.log(props);
        const { title, desc } = props;
        return (
            <View style={styles.container}>
                <TouchableOpacity onPress={() => props.navigation.navigate('SingleTodoScreen')}>
                    <Text style={styles.listText}>{title}</Text>
                </TouchableOpacity>
            </View>
        )
    }
    

    【讨论】:

    • 非常感谢您将代码添加到调试但忘记删除
    • 你能告诉我为什么 onPress 不工作吗? TypeError: undefined is not an object (evaluation 'props.navigation.push')
    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多