繁体   English   中英

将 React 组件返回为 object 值并将道具绑定到它

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM