React Native错误失败的道具类型:提供给`Overlay`的`array`类型的无效道具`children`,

Posted

技术标签:

【中文标题】React Native错误失败的道具类型:提供给`Overlay`的`array`类型的无效道具`children`,【英文标题】:React Native error Failed prop type: Invalid prop `children` of type `array` supplied to `Overlay`, 【发布时间】:2021-04-03 12:37:41 【问题描述】:

我是 React Native 新手,打开一个组件时出现错误消息。这不会避免继续导航,但我想清除它。我很确定这是语法或拼写错误,但找不到它的出处。

在我的组件中,我有一个模式,一旦单击按钮就会调用一个函数。

这是组件的代码:

import  connect  from "react-redux";
import React,  useEffect, useState  from "react";
import 
  StyleSheet,
  ScrollView,
  View,
  Text,
  Image,
  TouchableOpacity,
 from "react-native";
import  Card, Button, Overlay  from "react-native-elements";

import AsyncStorage from "@react-native-async-storage/async-storage";

import  PRIVATE_URL  from "../config";


function SettingsScreen( setReduxUser, user ) 
  const [visible, setVisible] = useState(false);

  const toggleOverlay = () => 
    setVisible(!visible);
  ;

  const handleLogOut = async () => 
    await fetch(`$PRIVATE_URL/logout?token=$user.token`);
    AsyncStorage.removeItem("userToken");
    setReduxUser( id: null, pseudo: null, token: null );
  ;

  const handleDeleteUser = async () => 
    await fetch(`$PRIVATE_URL/delete-user?id=$user.id`);
    AsyncStorage.removeItem("userToken");
    setReduxUser( id: null, pseudo: null, token: null );
  ;

  return (
    <View>
      <ScrollView>

        <Card containerStyle= borderRadius: 5, borderColor: "#abd6d3" >
          <View>
            <Button
              type="clear"
              titleStyle= color: "black" 
              title="Déconnexion"
              onPress=() => handleLogOut()
            />
          </View>
        </Card>
        

           <View
          style=
            alignItems: "center",
            justifyContent: "center",
          
        >
          <TouchableOpacity onPress=toggleOverlay>
            <Text
              style=
                color: "#eb4d4b",
              
            >
              Supprimer mon compte
            </Text>
          </TouchableOpacity>
          <Overlay
            isVisible=visible
            onBackdropPress=toggleOverlay
            overlayStyle=
              borderRadius: 5,
              width: "94%",
              height: "25%",
              justifyContent: "space-between",
              borderWidth: 1,
              borderColor: "#418581",
            
          >
            <Text>
              Êtes-vous sur de vouloir supprimer votre compte ?
            </Text>
            <Button
              type="clear"
              titleStyle= color: "#418581" 
              title="Non, je veux continuer à déjeuner"
              onPress=toggleOverlay
            />
            <Button
              type="clear"
              titleStyle= color: "#eb4d4b", fontSize: 14 
              title="Oui, j'ai pris ma décision"
              onPress=() => handleDeleteUser()
            />
          </Overlay>
        </View>
      </ScrollView>
    </View>
  );


function mapDispatchToProps(dispatch) 
  return 
    setReduxUser: function (user) 
      dispatch( type: "user", user );
    ,
  ;


function mapStateToProps(state) 
  return  user: state.user ;


export default connect(mapStateToProps, mapDispatchToProps)(SettingsScreen);

【问题讨论】:

【参考方案1】:

您需要将&lt;Overlay&gt; 中的元素包装到一个容器中,这样它就只有一个父元素,而不是一个元素数组。

           <Overlay
            isVisible=visible
            onBackdropPress=toggleOverlay
            overlayStyle=
              borderRadius: 5,
              width: "94%",
              height: "25%",
              justifyContent: "space-between",
              borderWidth: 1,
              borderColor: "#418581",
            
          >
           //WRAP CONTAINER HERE
            <Text>
              Êtes-vous sur de vouloir supprimer votre compte ?
            </Text>
            <Button
              type="clear"
              titleStyle= color: "#418581" 
              title="Non, je veux continuer à déjeuner"
              onPress=toggleOverlay
            />
            <Button
              type="clear"
              titleStyle= color: "#eb4d4b", fontSize: 14 
              title="Oui, j'ai pris ma décision"
              onPress=() => handleDeleteUser()
            />
           //WRAP CONTAINER HERE
          </Overlay>

您的容器可能只是&lt;View&gt;...&lt;/View&gt;

【讨论】:

以上是关于React Native错误失败的道具类型:提供给`Overlay`的`array`类型的无效道具`children`,的主要内容,如果未能解决你的问题,请参考以下文章

警告:失败的道具类型:提供给“Carousel”的“对象”类型的无效道具`数据`,预期`数组`

在 React.js 中进行道具验证时道具类型失败

Typescript 和 React:使用 React.Component 和条件类型化道具时类型推断失败

反应错误'失败的propType:提供给'Provider'的无效道具'children',需要一个ReactElement'

类型中缺少 TypeScript 属性“导航”,但类型“道具”React Native 中需要

在对计数器函数的React中使用映射函数