Home > Back-end >  This JSX tag's 'children' prop expects a single child of type 'ReactNode',
This JSX tag's 'children' prop expects a single child of type 'ReactNode',

Time:09-08

I'm new to typescript, converting an array into an option tag but got the error, My interface is

interface ViewEmployeeManagerPostType {
  id: string;
  user: string;
  department: string;
  experience: string;
  height: string;
  value: string;
  children: React.ReactNode[] | React.ReactNode;
};

My Array

const [ManagerEmployee, setManagerEmployee] = useState<ViewEmployeeManagerPostType[]>([]);

Component return ()

----
----
<option value="">Select Employee ID</option>
    {ManagerEmployee.map((option) => 
       <option key={count  } value={option}>
          Employee ID = {option}
       </option>
     )}
----
----

I'm getting error on the option opening tag and value

CodePudding user response:

In the interface, you need to use children: React.ReactNode; instead of children: React.ReactNode[] | React.ReactNode;

In addition to that, the option represents the ManagerEmployee object and hence you cannot simply print it out using {option}. Instead, you need to use value={option.value} and Employee ID = {option.id}

----
----
<option value="">Select Employee ID</option>
{ManagerEmployee.map((option) => 
   <option key={option.id} value={option.value}>
      Employee ID = {option.id}
   </option>
)}
----
----

CodePudding user response:

As you see, there's an unambiguous requirement: 'children' prop expects a single child, thus

children: React.ReactNode;

And when you provide array of React nodes to children component prop, just wrap them with <Fragment> or <> like this

children={
   <>
    <option value="">Select Employee ID</option>
    {ManagerEmployee.map((option) => 
       <option key={option.id} value={option.value}>
         Employee ID = {option.id}
       </option>
   )}
   </>
}
  • Related