[英]Return React component as object value and bind props to it
有一个全局钩子在使用时会返回反应组件:
const { SomeComponent1, SomeComponent2 } = useHook({ prop1, prop2 })
如何将道具传递给从钩子返回的组件?
const useHook = ({ prop1, prop2 }) => {
return {
SomeComponent1, // <-- I'd like to 'bind' props to the component here
SomeComponent2,
// THE CODE BELOW IS INCORRECT
// it's a way to illustrate what I am after:
// SomeComponent1: <SomeComponent1 prop1={prop1} />
}
}
将道具传递给被破坏的反应组件对我来说是不行的:
const { Comp1, Comp2 } = useHook()
return (
<Comp1 prop={prop1} />
)
您可以将组件创建为功能组件并在 useHook 中使用useMemo
以防止在每次渲染时重新安装组件
const useHook = ({ prop1, prop2 }) => {
const SomeComponent1Wrap = useMemo(() => ( ) => {
return <SomeComponent1 prop={prop1} />
}, [props1]);
const SomeComponent2Wrap = useMemo(() => ( ) => {
return <SomeComponent2 prop={prop2} />
}, [props2]);
return {
SomeComponent1: SomeComponent1Wrap,
SomeComponent2: SomeComponent2Wrap,
}
}
最常见和最优雅的解决方案将是基于条件的渲染。 您可以使用基于三元的运算符来显示您的组件例如。
import React,{useState} from "react";
import {Comp1} from "./comp1";
import {Comp2} from "./comp2";
function Test(){
const [display,setDisplay] = useState(true);
render(){
<>
{display ? <Comp1 props={props} /> : <Comp2 props={props} /> }
</>
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.