typescript - React-Typescript:这个 JSX 标签的 'children' 属性需要一个 'Element | undefined' 类型的 child ,但提供了多个 child

标签 typescript react-typescript

我正在为我的应用程序使用 react-typescript。对于样式,我使用 Style 组件。我决定创建我的自定义 Hooks 输入和密码输入。所以我首先创建了 Input 包装器,在其中添加了必要的输入字段。之后我创建了密码输入字段。我用输入组件 Prop 扩展了我的密码输入组件 Prop 。但是当我将 Input 组件包装器用于我的密码组件时。我收到错误:This JSX tag's 'children' prop expects a single child of type 'Element | undefined', but multiple children were provided.
我不知道我做错了什么。

这是我的输入包装组件

import React from "react";
import styled from "styled-components";
import ErrorBoundary from "components/errorBoundary";

const Container = styled.div`
  position: relative;
`;

const Label = styled.label<{ minimized?: boolean }>`
  display: block;
  color: ${({ theme }) => theme.inputLabelColor};
  font-weight: 400;
  font-size: ${({ minimized }) => (minimized ? "11px" : "16px")};
  margin-bottom: 5px;
  letter-spacing: -0.2px;
  position: absolute;
  transform: translateY(${({ minimized }) => (minimized ? "9px" : "16px")});
  left: 20px;
  top: 0;
  pointer-events: none;
  transition: transform 150ms linear, font-size 150ms linear;
`;

const Error = styled.p`
  color: ${({ theme }) => theme.errorTextColor};
`;

const Description = styled.p`
  color: blue;
`;

export interface IInputWrapperProps {
  label?: string;
  required?: boolean;
  minimizedLabel?: boolean;
  description?: string;
  error?: string;
  wrapperStyle?: React.CSSProperties;
  children?: JSX.Element;
}

export default ({
  label,
  error,
  description,
  children,
  required,
  wrapperStyle,
  minimizedLabel
}: IInputWrapperProps) => {
  return (
    <ErrorBoundary id="InputWrapperErrorBoundary">
      <div style={wrapperStyle}>
        <Container>
          <Label minimized={minimizedLabel}>
            {label} {required && <span style={{ color: "red" }}> *</span>}
          </Label>
          {children}
        </Container>
        {description && <Description>{description}</Description>}
        {error && <Error>{error}</Error>}
      </div>
    </ErrorBoundary>
  );
};

这是我的密码组件
import React, { useState } from "react";
import styled from "styled-components";
import eyeHide from "./eye-svgfiles/eyeHide.svg";
import eyeShow from "./eye-svgfiles/eyeShow.svg";
import InputWrapper, { IInputWrapperProps } from "../wrapper";
const Passwordinput = styled.input`
  border: 2px solid ${({ theme }) => theme.inputBorderColorFaded};
  background: ${({ theme }) => theme.inputBackgroundColor};
  display: block;
  border-radius: 5px;
  box-shadow: none;
  color: ${({ theme }) => theme.inputTextColor};
  height: 52px;
  width: 100%;
  margin: 0;
  padding: 1px 15px;
  &:focus {
    border: 2px solid ${({ theme }) => theme.inputBorderColor};
    outline: 0;
  }
`;
const Svg = styled.div`
  position: absolute;
  left: 50%;
  top: 65%;
  transform: scale(0.8);
`;

export interface IPasswordProps extends IInputWrapperProps {
  onChange: (i: string) => void;
  value?: string | undefined;
}
export default ({ onChange, value, label, error, ...rest }: IPasswordProps) => {
  const [state, setstate] = useState(false);
  return (
    <div>
      <InputWrapper label={label} error={error} {...rest}> //I am getting error in here 
        <Passwordinput
          label={label}
          type={state ? "text" : "password"}
          onChange={e => onChange(e.target.value)}
          value={value}
          error={error}
        />
        <Svg>
          <img
            onClick={() => setstate(state => !state)}
            style={{ cursor: "pointer" }}
            src={state ? eyeShow : eyeHide}
            alt="searchIcon"
          />
        </Svg>
      </InputWrapper>
    </div>
  );
};

最佳答案

像这样编写你的界面:

export interface IInputWrapperProps {
  label?: string;
  required?: boolean;
  minimizedLabel?: boolean;
  description?: string;
  error?: string;
  wrapperStyle?: React.CSSProperties;
  children?: JSX.Element|JSX.Element[];
}
事实上写作:
children: JSX.Element|JSX.Element[];
子元素可以是单个 JSX 元素或元素数组。

关于typescript - React-Typescript:这个 JSX 标签的 'children' 属性需要一个 'Element | undefined' 类型的 child ,但提供了多个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62382324/

相关文章:

javascript - 使用 typescript 和 webpack 进行代码拆分

reactjs - React ant design Tab图标改变不同状态

javascript - react.js typescript spread(...) 仅添加最后一个元素

reactjs - 如何在基于 Typescript 的 React Web 应用程序中具有参数的 Route 元素中传递其他 Prop

reactjs - create-react-app typescript 不会运行 npm start

reactjs - 基于其他 Prop 值(value)的条件类型

angular - 上下文菜单在我的 ag-grid 中不起作用

javascript - 如何根据相同的键名在枚举之间进行映射?

Angular Material Tabs Wrapper - 添加新选项卡不会反射(reflect)在 UI 中

javascript - 使用 Jest 模拟时出现 typescript 错误