将函数作为 prop 传递给 Typescript React 功能组件
Passing a function as a prop to a Typescript React Functional Component
我有一个功能组件(用 Typescript 编写)需要将处理函数向下传递给子组件。这是父函数的缩小版本:
type Props = { handleLocationChange(): void };
const Sidebar: React.FC<Props> = (props) => {
const handleLocationChange = () => {
console.log('Location Changed.');
};
return (
<>
<Search handleLocationChange={handleLocationChange} />
</>
)
}
在 VS Code 中,搜索组件显示错误:
类型'{ handleLocationChange: () => void; }' 不可分配给类型 'IntrinsicAttributes & { children?: ReactNode; }'。
属性 'handleLocationChange' 在类型 'IntrinsicAttributes & { children?: ReactNode; }'.ts(2322)
上不存在
如有任何帮助,我们将不胜感激。我确定我遗漏了一些小东西。
用这种方式像函数一样编写您的处理程序
function handleLocationChange(){
console.log('Location Changed.');
};
那么应该可以了
您需要在 Search 组件上将 handleLocationChange 声明为 prop
需要在Search Component 中声明prop type 和parameter type:
//use this type to both components (children and parent)
interface FuncProps {
//here you can declare the return type (here is void)
handleLocationChange: (values: any) => void;
}
//children start
// here are the tip, define the type in the React.FC and in the FC's parameters itself
const Search: React.FC<FuncProps> = (props: FuncProps) => {
... your component behavior and view ...
return (
{/*↓↓↓↓ use the prop like this ↓↓↓↓*/}
<input onClick={props.handleLocationChange('something if you need')}/>
)
};
//children end
// parent start
const Sidebar: React.FC<Props> = (props: FuncProps) => {
return (
<>
<Search handleLocationChange={props.handleLocationChange} />
</>
)
}
//parent end
我希望这个答案可以帮助那些想使用 typescript 并希望通过组件轻松传递函数的人(我不建议通过多个级别传递函数)。
我有一个功能组件(用 Typescript 编写)需要将处理函数向下传递给子组件。这是父函数的缩小版本:
type Props = { handleLocationChange(): void };
const Sidebar: React.FC<Props> = (props) => {
const handleLocationChange = () => {
console.log('Location Changed.');
};
return (
<>
<Search handleLocationChange={handleLocationChange} />
</>
)
}
在 VS Code 中,搜索组件显示错误:
类型'{ handleLocationChange: () => void; }' 不可分配给类型 'IntrinsicAttributes & { children?: ReactNode; }'。 属性 'handleLocationChange' 在类型 'IntrinsicAttributes & { children?: ReactNode; }'.ts(2322)
上不存在如有任何帮助,我们将不胜感激。我确定我遗漏了一些小东西。
用这种方式像函数一样编写您的处理程序
function handleLocationChange(){
console.log('Location Changed.');
};
那么应该可以了
您需要在 Search 组件上将 handleLocationChange 声明为 prop
需要在Search Component 中声明prop type 和parameter type:
//use this type to both components (children and parent)
interface FuncProps {
//here you can declare the return type (here is void)
handleLocationChange: (values: any) => void;
}
//children start
// here are the tip, define the type in the React.FC and in the FC's parameters itself
const Search: React.FC<FuncProps> = (props: FuncProps) => {
... your component behavior and view ...
return (
{/*↓↓↓↓ use the prop like this ↓↓↓↓*/}
<input onClick={props.handleLocationChange('something if you need')}/>
)
};
//children end
// parent start
const Sidebar: React.FC<Props> = (props: FuncProps) => {
return (
<>
<Search handleLocationChange={props.handleLocationChange} />
</>
)
}
//parent end
我希望这个答案可以帮助那些想使用 typescript 并希望通过组件轻松传递函数的人(我不建议通过多个级别传递函数)。