'어린이' 소품의 종류는 무엇입니까?
다음과 같은 매우 간단한 기능 컴포넌트가 있습니다.
import * as React from 'react';
export interface AuxProps {
children: React.ReactNode
}
const aux = (props: AuxProps) => props.children;
export default aux;
또 다른 컴포넌트는 다음과 같습니다.
import * as React from "react";
export interface LayoutProps {
children: React.ReactNode
}
const layout = (props: LayoutProps) => (
<Aux>
<div>Toolbar, SideDrawer, Backdrop</div>
<main>
{props.children}
</main>
<Aux/>
);
export default layout;
다음 오류가 계속 발생합니다.
[ts] JSX 요소 유형 'ReactNode'는 JSX 요소의 생성자 함수가 아닙니다.'undefined' 유형은 'ElementClass' 유형에 할당할 수 없습니다.[2605]
이거 어떻게 치죠?
★★★★★★★★★★★★★★★★★.children: React.ReactNode
.
「 」를 하려면 , 「 」를 합니다.<Aux>
에서는, 「JSX」 「」를여야 합니다.ReactElement<any> | null
이것이 함수 컴포넌트의 정의입니다.
는 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아React.ReactNode
훨씬 더 넓은 타입입니다.반응:
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
FragmentRespect Fragment)로합니다.<></>
const aux: React.FC<AuxProps> = props =>
<>{props.children}</>;
하시면 됩니다.ReactChildren
★★★★★★★★★★★★★★★★★」ReactChild
:
import React, { ReactChildren, ReactChild } from 'react';
interface AuxProps {
children: ReactChild | ReactChildren;
}
const Aux = ({ children }: AuxProps) => (<div>{children}</div>);
export default Aux;
요소의 플랫 배열을 통과해야 하는 경우:
interface AuxProps {
children: ReactChild | ReactChild[] | ReactChildren | ReactChildren[];
}
이 경우에도 하실 수 있습니다.React.PropsWithChildren<P>
.
type ComponentWithChildProps = React.PropsWithChildren<{example?: string}>;
이것이 나에게 효과가 있었다.
interface Props {
children: JSX.Element[] | JSX.Element
}
권장하는 편집children: React.ReactNode
대신 지금 당장.
A React Node
종류는 .
Boolean
(무시됩니다)null
★★★★★★★★★★★★★★★★★」undefined
(무시됩니다)Number
String
- A
React element
의 )JSX
) - 위의 배열 중 하나(내스트된 배열일 수 있음)
import { ReactNode, FC } from 'react'
type Props = { children: ReactNode }
const App: FC<Props> = ({children}) => (<div>{children}</div>)
다음과 같이 컴포넌트를 선언할 수 있습니다.
const MyComponent: React.FunctionComponent = (props) => {
return props.children;
}
은 '돌아가다'로 됩니다.JSXElement | null
TypeScript에 있습니다.이는 현재 유형의 제한이며, pure React는 더 많은 리턴 유형을 허용합니다.
회피책으로서 타입 아사션 또는 프래그먼트를 사용할 수 있습니다.
const Aux = (props: AuxProps) => <>props.children</>;
const Aux2 = (props: AuxProps) => props.children as ReactElement;
ReactNode
children: React.ReactNode
에 대한 강력한 유형을 갖는 것이 목표라면 차선책이 될 수 있습니다.Aux
.
현재에는 거의 모든 것을 할당할 수 있습니다.ReactNode
에하는 유형입니다.{} | undefined | null
고객님의 경우 보다 안전한 유형은 다음과 같습니다.
interface AuxProps {
children: ReactElement | ReactElement[]
}
예:
의 「」Aux
과 같은 요소가 합니다.children
로 가 string
그러면 위의 솔루션은 링크된 놀이터를 보는 것과 대조적으로 오류를 일으킬 수 있습니다.
된 ★★children
또한 Render Prop 콜백과 같은 JSX 이외의 소품에도 유용합니다.
다음을 사용하고 있습니다.
type Props = { children: React.ReactNode };
const MyComponent: React.FC<Props> = ({children}) => {
return (
<div>
{ children }
</div>
);
export default MyComponent;
모든 유형을 찾는 일반적인 방법은 예입니다.타이프 스크립트의 장점은 올바른 유형만 있으면 모든 유형에 액세스할 수 있다는 것입니다.@types/
files.complete files files files files files files files files.
에 답하기 저는 '이 ' 반응'으로 '성분 반응'으로 있는 것을 .children
네. 네. 네. 네.?<div />
필요한 것은 vscoode를 오픈하고 새로운 vscoode를 생성하기만 하면 됩니다..tsx
@types/react
.
import React from 'react';
export default () => (
<div children={'test'} />
);
상공을 맴돌다children
prop는 유형을 보여줍니다.그리고 당신이 아는 것은 -- 그 타입은 (필요 없음)입니다.ReactNode[]
).
그런 다음 유형 정의를 클릭하면 바로 다음 정의로 이동합니다.children
유래하다DOMAttributes
인터페이스입니다.
// node_modules/@types/react/index.d.ts
interface DOMAttributes<T> {
children?: ReactNode;
...
}
주의: 알 수 없는 유형을 찾으려면 이 프로세스를 사용해야 합니다.모두 당신이 찾기를 기다리고 있습니다.
를 사용할 수도 있습니다.JSX.ElementChildrenAttribute
export default function Layout({children}: JSX.ElementChildrenAttribute) {
return <div>
{children}
</div>
}
저는 'JSX'입니다.Element"는 기능합니다.
interface childrenProps {
children: JSX.Element;
}
const index = ({ children }: childrenProps) => {
return (
<>
<NavBar />
{children}
</>
);
};
export default index;
TypeScript 사이트:https://github.com/Microsoft/TypeScript/issues/6471 에서 입수합니다.
소품 타입을 {children}으로 쓰는 것이 권장되는 연습입니까?: any}
나한테는 효과가 있었어.자노드는 여러 가지가 있기 때문에 명시적 입력으로 인해 대소문자가 누락될 수 있습니다.
다음 문제에 대해서는 https://github.com/Microsoft/TypeScript/issues/13618,에서 더 긴 논의를 하고 있지만, 어떤 접근법도 여전히 유효합니다.
이러한 답변은 오래된 것 같습니다.리액션에는 타입이 내장되어 있습니다.PropsWithChildren<{}>
이 페이지의 일부 정답과 동일하게 정의되어 있습니다.
type PropsWithChildren<P> = P & { children?: ReactNode };
이것은 항상 나에게 효과가 있었다.
type Props = {
children: JSX.Element;
};
자녀가 포함된 유형으로 다음을 사용하고 있습니다.
type ChildrenContainer = Pick<JSX.IntrinsicElements["div"], "children">
이 어린이 컨테이너 유형은 모든 다양한 사례를 지원할 수 있을 정도로 일반적이며 반응에도 적합합니다.JS API
예를 들어 다음과 같습니다.
const layout = ({ children }: ChildrenContainer) => (
<Aux>
<div>Toolbar, SideDrawer, Backdrop</div>
<main>
{children}
</main>
<Aux/>
)
모든 반응 컴포넌트가 반환되어야 한다는 것을 알아야 합니다.
null
또는React.Element
, 단, 타입은props.children
이React.ReactNode
를 사용해야 합니다.props.children
안쪽에서Element
Babel이 컨스트럭터를 구성하도록 하다Element
.리액션 컴포넌트의 두 번째 규칙은 이름의 첫 번째 문자가 대문자가 되어야 리액션이 컴포넌트가 html 태그가 아니라는 것을 인식할 수 있다는 것입니다.
코드는 이렇게 해야 합니다.
const Aux = (props: AuxProps) => <>props.children</>;
또 다른 힌트: 아직 타이프스크립트를 사용하고 있는 경우 기능 컴포넌트는 다음 타입이어야 합니다.React.FC
type Props = {
title: string;
}
const Aux:React.FC<Props> = (props) =>
(
<div>
<h3>{props.title}</h3>
{ props.children }
{/* children is exist by default in type React.FC */}
</div>
)
나에게 @Sibren의 대답은 명확하지 않았지만, 나는 이 SO anwer를 찾아서 모두 인라인으로 만들었다(그것이 가장 빠른 방법이 아니라 가장 이해하기 쉬운 방법일지도 모른다).
function MyComponentWithChildren({
customProp,
children, /*notice the children are implicit*/
}: React.PropsWithChildren<{ customProp: any }>) {
return <div>{children}</div>;
}
React를 확장할 수도 있습니다.PropesWithChildren을 자녀 속성이 포함된 인터페이스에 연결합니다.
interface Props extends React.PropsWithChildren{
listItems: Items[],
clickItem?: () => void,
}
아니면 직접 아이들을 정의할 수도 있습니다.
interface Props{
listItems: Items[],
clickItem?: () => void,
children: React.ReactNode
}
const List:FC<Props> = ({listItems,clickItem,children}) => {
return (
<>
{children}
</>
)
}
아니면 이렇게 해도 돼요.이것은 소품 유형을 정의하는 또 다른 방법입니다.
const List = ({ children }: {children: React.ReactNode}) => {
하여 '''만 할 수 .children
이 without가 없는 type
★★★★★★★★★★★★★★★★★」interface
FC
(일부러) 태그 jsx는 jsx라고 합니다.<>
가 될 수 undefined
★★★★★★★★★★★★★★★★★」null
:
import { FC } from "react";
export const Layout: FC = (props) => {
return <>{props.children}</>;
};
-- 또는 --
import { FC } from "react";
export const Layout: FC = ({ children }) => <>{children}</>;
이 솔루션은 나에게 완벽하게 잘 작동한다
interface Props {
children: Array<ReactElement<ChildProps, JSXElementConstructor<ChildType>>>;
}
update: 이해하기 쉬운 포괄적인 예.
interface ChildProps {}
class ChildComponent extends React.Component<ChildProps> {}
interface ParentProps {
children: Array<ReactElement<ChildProps, JSXElementConstructor<ChildComponent>>>;
}
class ParentComponent extends React.Component<ParentProps> {}
언급URL : https://stackoverflow.com/questions/53688899/what-is-the-type-of-the-children-prop
'source' 카테고리의 다른 글
Angular에서 '바꾸기' 속성이 더 이상 사용되지 않는 이유는 무엇입니까?JS 디렉티브? (0) | 2023.04.02 |
---|---|
Error 415 Unsupported Media Type: POST가 JSON의 경우 REST에 도달하지 않지만 XML의 경우 REST에 도달합니다. (0) | 2023.04.02 |
SQL 쿼리에서 (+)의 의미 (0) | 2023.04.02 |
요소를 ng-transclude로 대체하는 방법 (0) | 2023.04.02 |
csv 워드프레스로 내보내기 (0) | 2023.04.02 |