反应本机自定义组件道具不起作用

Posted

技术标签:

【中文标题】反应本机自定义组件道具不起作用【英文标题】:React native custom component props not working 【发布时间】:2021-10-23 14:16:39 【问题描述】:

嘿,所以我正在尝试使用自定义文本输入并为其提供 autoCorrect、autoCapitalise 等道具,但由于某种原因无法正常工作,只有当我直接在从 react native 模块导入的原始 TextInput 上使用它们时才有效。这是我如何做的代码。请帮我看看我在哪里或做错了什么。

import React from 'react';
import  Image, StyleSheet, View  from 'react-native';
import AppTextInput from '../components/AppTextInput';
import  Formik  from 'formik';
import * as Yup from 'yup';
import Screen from '../components/Screen';
import AppBtn from '../components/AppBtn';
import AppText from '../components/AppText';

const validationSchema = Yup.object().shape(
  email: Yup.string().required().email().label('Email'),
  password: Yup.string().required().min(4).label('Password'),
);

export default function LoginScreen() 
  const img = require('../assets/logo.png');

  return (
    <Screen>
      <Image source=img style=styles.logo />

      <Formik
        initialValues= email: '', password: '' 
        onSubmit=(values) => console.log(values)
        validationSchema=validationSchema>
        ( handleChange, handleSubmit, errors ) => (
          <>
            <AppTextInput
              autoCapitalize="none"
              autoCorrect=false
              icon="email"
              onChangeText=handleChange('email')
              keyboardType="email-address"
              placeholder="email"
            />
            <AppText style= color: 'red' >errors.email</AppText>
            <AppTextInput
              autoCapitalize="none"
              autoCorrect=true
              icon="lock"
              keyboardType="numeric"
              onChangeText=handleChange('password')
              secureTextEntry=true
              placeholder="password"
            />
            <AppText style= color: 'red' >errors.password</AppText>
            <View style=styles.btn>
              <AppBtn title="Login" onPress=handleSubmit />
            </View>
          </>
        )
      </Formik>
    </Screen>
  );

然后appTextInput本身就是这个

import  StyleSheet, Text, TextInput, View  from 'react-native';
import  MaterialCommunityIcons  from '@expo/vector-icons';

export default function AppTextInput( icon, placeholder ) 
  return (
    <View style=styles.container>
      /* render only if icon is defined */
      icon && (
        <MaterialCommunityIcons name=icon size=40 style=styles.icon />
      )
      <TextInput style= fontSize: 25  placeholder=placeholder />
    </View>
  );

我哪里出错了?即使没有formik 和是的,它仍然拒绝通过控制台从输入字段中注销值。提前感谢您的帮助:)

【问题讨论】:

【参考方案1】:

为了使这些道具起作用,您必须将它们提供给实际的TextInput 组件。在您的LoginScreen 组件中,您使用的是正确的AppTextInput

但是在您的 AppTextInput 组件中,您只处理两个道具,iconplaceholder。要使其他 TextInput 道具工作,您必须将它们提供给您的 TextInput 组件。

import  StyleSheet, Text, TextInput, View  from 'react-native';
import  MaterialCommunityIcons  from '@expo/vector-icons';

export default function AppTextInput(props) 
  const  icon, placeholder  = props;
  return (
    <View style=styles.container>
      /* render only if icon is defined */
      icon && (
        <MaterialCommunityIcons name=icon size=40 style=styles.icon />
      )
      <TextInput
        ...props
        style= fontSize: 25 
        placeholder=placeholder
      />
    </View>
  );


在这里,我使用 ...props 将传递的道具添加到TextInput 组件。现在你的 props 也被传递给 TextInput 组件,它应该可以按预期工作。

【讨论】:

以上是关于反应本机自定义组件道具不起作用的主要内容,如果未能解决你的问题,请参考以下文章

反应自定义组件 - 无法根据道具设置状态

如何在带有打字稿的反应功能组件中定义自定义道具?

路由器道具和自定义道具与打字稿反应路由器dom用于功能组件

如何在本机反应中制作动画可折叠组件?

反应本机secureTextEntry在android上不起作用

在自定义组件中调用 useState Hook 时反应本机 TextInput ReRenders