Получение ошибки при создании компонента InputField в React Native

#reactjs #react-native

#reactjs #react-native

Вопрос:

Я новичок в React native,

когда я создаю компонент InputField в React Native, я получаю сообщение об ошибке:

введите описание изображения здесь

InputField.js

       import React from 'react';
      import { View, TextInput, Text } from 'react-native';
      import PropTypes from 'prop-types';
      import s from './styles';
      import { Input, Item, Label } from 'native-base';

      const InputField = ({
        label,
        inputStyle,
        containerStyle,
        touched,
        error,
        itemLabel,
        ...props
      }) => {

        let ItemData;
        let ItemInfo =
          <View>
            <Label>{label}</Label>
            <Input style={inputStyle} {...props} />
            <Text style={s.errorInput}>{touched amp;amp; error}</Text>
          </View>;

        switch (itemLabel) {
          case 'fixedLabel':
            ItemData =
              <Item fixedLabel>
                <ItemInfo />
              </Item>;
            break;
          case 'floatingLabel':
            ItemData =
              <Item floatingLabel>
                <ItemInfo />
              </Item>;
            break;
          case 'inlineLabel':
            ItemData =
              <Item inlineLabel>
                <ItemInfo />
              </Item>;
            break;
          case 'stackedLabel':
            ItemData =
              <Item stackedLabel>
                <ItemInfo />
              </Item>;
            break;

          default:
            ItemData =
              <Item >
                <Label>{label}</Label>
                <Input style={inputStyle} {...props} />
                <Text style={s.errorInput}>{touched amp;amp; error}</Text>
              </Item>;
        }
        return (
          <View style={s.containerStyle}>
            <ItemData />
          </View>
        );
      };


      // this made me thing about TypeScript
      // and what it was created to solve😅
      const stylePropsType = PropTypes.oneOfType([
        PropTypes.arrayOf(PropTypes.object),
        PropTypes.object,
      ]);

      InputField.propTypes = {
        inputStyle: stylePropsType,
        containerStyle: stylePropsType,
        ...TextInput.propTypes, // this makes the InputField component have proptypes of Textinput
      };
      InputField.defaultProps = {
        inputStyle: s.input,
        containerStyle: s.containerStyle,
        touched: false,
        error: null,
      };

      export default InputField;
 

Пожалуйста, помогите мне разобраться в моей ошибке.

Комментарии:

1. Одна из проблем, которую я вижу, заключается в том, что вы использовали <просмотр> вместо <Просмотр>

2. Спасибо, @GuruparanGiritharan за ваш ответ, но все же сейчас я сталкиваюсь с той же ошибкой.

Ответ №1:

Я смог упростить ваш компонент, и, похоже, это сработало.

 const knownItemLabels = ['fixedLabel', 'floatingLabel', 'inlineLabel', 'stackedLabel'];

const InputField = ({
  label,
  inputStyle,
  containerStyle,
  touched,
  error,
  itemLabel,
  ...props
}) => {

  const itemProp = knownItemLabels.includes(itemLabel)
  ? { [itemLabel]: true }
  : {};

  return (
    <View style={s.containerStyle}>
       <Item {...itemProp}>
          <Label>{label}</Label>
          <Input style={inputStyle} {...props} />
          <Text style={s.errorInput}>{touched amp;amp; error}</Text>
      </Item>
    </View>
  );
};
 

Комментарии:

1. Спасибо, @windowsill, мне действительно нравится ваше упрощение кода, я узнаю от вас новую концепцию, еще раз спасибо. 🙂

Ответ №2:

Попробуйте это, измените <view> to <View>

   let ItemInfo =
              <View>
                <Label>{label}</Label>
                <Input style={inputStyle} {...props} />
                <Text style={s.errorInput}>{touched amp;amp; error}</Text>
              </View>;