【问题标题】:Modify one component with another (HOC maybe?)用另一个组件修改一个组件(也许是 HOC?)
【发布时间】:2021-05-31 23:47:14
【问题描述】:

我已经看到一些库,例如 react 中的“framer-motion”使用这种语法工作,例如插入一个动画 H1:<motion.h1> 这将转换为一个 h1,但动画在组件的 props 中定义.

我不明白的是“运动”组件如何访问“h1”,然后在函数中它知道要渲染动画的组件。

我需要创建一个组件,例如 <lazy.div>,它解释一个 div 并带有我要定义的某些修改。

我需要知道的是如何使用该语法而不是典型的

<Lazy><h1>Content<h1> </Lazy>

是否也可以使用这种类型的语法来修改链元素或向那些已经修改的组件添加功能?

例如&lt;lazy.fullwidth.div&gt;

【问题讨论】:

    标签: javascript reactjs next.js


    【解决方案1】:

    当你创建一个函数时,这个函数就是一个对象。然后,您可以向该对象添加任何属性,并且属性本身可以是另一个函数。

    所以如果你有一个 react 组件函数,你可以让它的属性也成为组件函数。

    简单示例:

    const Example = () => (<div>Example Main Component</div> );
    
    Example.h1 = () => (<h1>Example.h1 component</h1>)
    
    const App = () => (
      <div>
        <Example />
        <Example.h1/>
      </div>  
      )
    
    // Render it
    ReactDOM.render(
      <App/>,
      document.getElementById("react")
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
    <div id="react"></div>

    【讨论】:

    • 非常感谢你真棒兄弟!现在我明白了,这对我帮助很大,但正如我所见,我需要定义该对象中的每个元素。组件有什么方法可以为我创建吗?可能不使用 example.h1 而是使用 所以组件采用该道具并返回一个

      所以如果我使用“as”道具中的任何元素,它会将其呈现为组件?
    • 你会像处理任何其他道具一样处理as
    • 好的,谢谢,我知道我可以使用。 var htmlVAR = props.as; return 它会返回一个 h1 例如?太棒了!
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多