Home > Mobile >  "Check the render method of" react native error
"Check the render method of" react native error

Time:09-27

I know this question has been asked a lot but non of the solutions on them solve my problem. I get this problem when rendering a specific component in my App file which is the "ListingEditScreen" which is a form and the error I have says

Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports. Check the render method of ListingEditScreen.

My code is as follows

import React from "react";
import ListingEditScreen from "./app/screens/ListingEditScreen";

export default function App() {
  return <ListingEditScreen />;
}

And then this is my ListingEditScreen

import React from "react";
import { StyleSheet, Text, View } from "react-native";
import * as Yup from "yup";
import {
  AppForm,
  AppFormField,
  AppFormPicker,
  SubmitButton,
} from "../components/forms";
import Screen from "../components/Screen";

const validationSchema = {
  title: Yup.string().required().min(1).label("Title"),
  price: Yup.number().required().min(1).max(10000).label("Price"),
  description: Yup.string().label("Description"),
  category: Yup.string().required().nullable().label("Category"),
};

const categories = [
  {
    id: 1,
    label: "Furniture",
  },
  {
    id: 2,
    label: "Electronics",
  },
  {
    id: 3,
    label: "Clothing",
  },
];

export default function ListingEditScreen() {
  return (
    <Screen style={styles.container}>
      <AppForm
        initialValues={{
          title: "",
          price: "",
          description: "",
          category: null,
        }}
        onSubmit={(values) => console.log(values)}
        validationSchema={validationSchema}
      >
        <AppFormField maxLength={255} name="title" placeholder="Title" />
        <AppFormField
          maxLength={8}
          name="price"
          placeholder="Price"
          keyboardType="numeric"
        />
        <AppFormPicker
          items={categories}
          name="category"
          placeholder="Category"
        />
        <AppFormField
          maxLength={255}
          multiline
          numberOfLines={3}
          name="description"
          placeholder="Description"
        />
        <SubmitButton title="Post" />
      </AppForm>
    </Screen>
  );
}

So where could I be going wrong because from the other questions it seems to be an import issue but I have checked all my imports and they seem fine so what could be the problem thanks in advance.

Edit: The problem seems to be in the AppFormPicker and here is the code below. Firstly, this is my forms folder index.js

export {default as AppForm} from "./AppForm"
export {default as AppFormField} from "./AppFormField"
export {default as AppFormPicker} from "./AppFormPicker"
export {default as FormError} from "./FormError"
export {default as SubmitButton} from "./SubmitButton"

And then followed by the AppFormPicker component

import React from "react";
import { useFormikContext } from "formik";
import { FormError } from "./FormError";
import AppPicker from "../AppPicker";

export default function AppFormPicker({ items, name, placeholder }) {
  const { errors, setFieldValue, touched, values } = useFormikContext();

  return (
    <>
      <AppPicker
        items={items}
        onSelectItem={(item) => setFieldValue(name, item)}
        placeholder={placeholder}
        selectedItem={values[name]}
      />
      <FormError error={errors[name]} visible={touched[name]} />
    </>
  );
}

My file structure is like this app⬇components⬇forms⬇➡AppForm.js,AppFormField.js,AppFormPicker.js,FormError.js,SubmitButton.js

This is the error in its entirety on the debuggerenter image description here

CodePudding user response:

In AppFormPicker's definition:

try changing:

return (
    <>
      <AppPicker
        items={items}
        onSelectItem={(item) => setFieldValue(name, item)}
        placeholder={placeholder}
        selectedItem={values[name]}
      />
      <FormError error={errors[name]} visible={touched[name]} />
    </>
  );

to be:

return (
    <React.Fragment>
      <AppPicker
        items={items}
        onSelectItem={(item) => setFieldValue(name, item)}
        placeholder={placeholder}
        selectedItem={values[name]}
      />
      <FormError error={errors[name]} visible={touched[name]} />
    </React.Fragment>
  );

I suspect the error message is seeing <> as a component whose name is undefined. In that, you literally have no component name there.

  • Related