我无法在反应原生平面列表中写入输入

Posted

技术标签:

【中文标题】我无法在反应原生平面列表中写入输入【英文标题】:I can't write to input in react native flatlist 【发布时间】:2021-09-29 13:16:24 【问题描述】:

我正在尝试学习 React Native。我有一个示例,但 FlatList 中存在问题。我在页脚组件中有一个 TextInput。没有错误,但是当我尝试写入输入字段时,键盘无法保留。它只是出现然后消失。我该如何解决这个问题? 这是我的代码:

import React,  useRef, useState  from "react";
import 
    Text,
    View,
    ActivityIndicator,
    Image,
    Button,
    Alert,
    TouchableOpacity,
    TextInput,
    FlatList,
 from "react-native";

function MyHeader() 
    return (
        <View style= marginHorizontal: 40, marginVertical: 60 >
            <Text style= fontWeight: "bold", fontSize: 24, marginBottom: 30 >
                Hello React Native
            </Text>
            <ActivityIndicator
                size="large"
                color="#c1262c"
                style= marginBottom: 30 
            />
        </View>
    );


function MyFooter() 
    const [text, setText] = useState("");

    const inputText = (text) => 
        setText(text);
    ;

    const alertMessage = text;
    return (
        <View>
            <View
                    style=
                    borderWidth: 2,
                    borderColor: "black",
                    padding: 20,
                    marginBottom: 30,
                
            >
                <Text>Hello again!</Text>
            </View>
            <TextInput
                style=
                    borderWidth: 2,
                    borderColor: "black",
                    padding: 20,
                    marginBottom: 30,
                
                value=text
                onChangeText=inputText
            />
            <Button
                onPress=() => Alert.alert(alertMessage)
                title="Learn More"
                color="#c1262"
            />
        </View>
    );


export default function App() 
    const randomNum = useRef(Math.random()).current;

    return (
        <FlatList
            ListHeaderComponent=MyHeader
            data=[0, 1, 2, 3, 4]
            renderItem=( item ) => 
                return (
                    <TouchableOpacity
                        onPress=() => Alert.alert(`You pressed image #$item + 1`)
                    >
                        <Image
                            source=
                                uri: `https://picsum.photos/500/300?random=$randomNum + item`,
                            
                            style= width: "100%", height: 160, marginBottom: 30 
                        />
                    </TouchableOpacity>
                );
            
            keyExtractor=(item) => String(item)
            ListFooterComponent=MyFooter
        />
    );

【问题讨论】:

我似乎无法使用运行 ios 12.4 的 iPhoneX 模拟器复制此问题。我将您上面的代码复制到一个应用程序中,键盘仍然为我打开。可能需要有关您的设置的更多信息。 【参考方案1】:

只需更改或删除 onChangeText=inputText

【讨论】:

我现在试过了,可惜没用。我也尝试使用 inputText 设置警报消息,当我尝试使用 ScrollView 时它正在工作。

以上是关于我无法在反应原生平面列表中写入输入的主要内容,如果未能解决你的问题,请参考以下文章

反应原生平面列表如何强制列表项具有相同的高度?

如何将对象迭代到平面列表中 - 反应原生?

反应原生平面列表不滚动

无法在本机反应中显示平面列表中的所有数据

反应原生模态时间延迟和生涩的动画

如何实现 Activity 指示器进行渲染,直到显示平面列表数据?反应原生