【问题标题】:What does <Component render={({ state }) => {}} /> do in React?<Component render={({ state }) => {}} /> 在 React 中做了什么?
【发布时间】:2020-12-21 15:33:07
【问题描述】:

我目前正在学习 ReactJS,我想使用 fullPageJS。它工作正常,但有些语法我不太明白。

组件:

   function home() {
    return (
        <ReactFullpage
            render={({ state, fullpageApi }) => {
            return (
                <ReactFullpage.Wrapper>
                    <div className="section">
                        <h1>Slide 1</h1>
                    </div>
                    <div className="section">
                        <h1>Slide 2</h1>
                    </div>
                </ReactFullpage.Wrapper>
            );
            }}
        />
    )
}
export default home;

现在我的问题是,render={({ state, fullpageApi }) =&gt; { return(); }} /&gt; 做什么?我可以看到它是一个属性,但我真的不明白它的用途。

【问题讨论】:

标签: javascript reactjs fullpage.js


【解决方案1】:

这是一种称为 Render Prop 的模式。它是一种通过您的代码和 ReactFullpage 中的代码之间的双向通信来决定渲染什么的方法。

您将函数作为道具之一传入。仅此一项就相当常见,例如将函数传递给 onClick 道具。这里的特别之处在于该函数的使用方式。

当 ReactFullpage 正在渲染时,它会调用你的函数。它基本上是在说“嘿,这里有一些数据(状态和 fullPageApi)。你希望我根据这些数据呈现什么?”然后,您的函数计算并返回您希望它呈现的元素。然后 ReactFullpage 将在其最终输出中使用这些元素。

有关渲染道具的更多信息,请参阅react's documentation on the pattern

【讨论】:

    【解决方案2】:

    在 react 中,render 是一种告诉 react 显示什么(DOM 应该是什么样子)的方法。方法或函数中的返回是方法或函数的输出。

    【讨论】:

      【解决方案3】:

      我也在学习 React!但是由于您的问题只是与 JS 相关,因此这是您的答案。 首先,让我们将您的 sn-p 分解。

      render={ ({ state, fullpageApi }) => { return (/** HTML */); } }
      

      render= 是 XML,我们不关心它。它是 HTML:您将属性传递给 Component 元素。方括号 {} 表示它是 HTML 代码中的 JS:这意味着您将 JS 值赋予元素的 render 属性。 {} 之间的剩余 JS 代码是:

      ({ state, fullpageApi }) => { return (/** HTML */); }
      

      这是一个函数!所以render 属性接受了一个可能稍后会执行的函数。

      这个匿名函数接受一个对象作为参数,但它解构它并且只使用statefullpageAPI 属性,这使得可以将它们用作变量:而不是写obj.state,你会写state,作为一个例子。 You can read more about restructuring on the MDN docs。然后它returns 括号中的 XML。

      【讨论】:

      • 不是 XML,而是 JSX 语法。
      • @Bergi 这是 XML。这是 HTML 使用的语法,&lt;elem prop="value" /&gt; HTML 是 XML。 JSX 所做的只是允许在 in JS 中编写 XML。
      • 但是 &lt;tag attr={…} /&gt;&lt;tag {...attrs}&gt; 是绝对不属于 XML 的特性。当然,JSX 的灵感来自 SGML 及其派生词,但并不相同。
      • 你说的完全正确,但是没有提到括号中的JS部分,我只是拿了render=,而不是后面的{}。它也可能是一个字符串,这并不重要;这部分是 XML。
      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 2021-02-01
      • 2017-04-20
      • 2020-05-23
      • 1970-01-01
      • 2020-05-10
      • 2018-09-19
      • 1970-01-01
      相关资源
      最近更新 更多