React 如何在子组件中获取父组件传递的参数

阅读时长 4 分钟读完

React 如何在子组件中获取父组件传递的参数

在 React 组件化开发中,组件间的参数传递是一个必须要涉及的话题。在 React 中,我们可以通过 props 传递参数,然后在子组件中获取父组件传递的参数。

父组件传递参数

我们先来看看父组件怎样传递参数。

在父组件的 render 函数中,通过 props 把参数传递给 ChildComponent 子组件。在这个例子中,我们传递了两个参数:一个叫做name,值为"Lucy",另一个参数叫做age,值为18。注意,props 传递参数的方式类似于传递函数的方式,通过属性名赋值的方式实现。

子组件获取参数

接下来,我们来看看在子组件中,怎样获取父组件传递的参数。

-- -------------------- ---- -------
------ ----- ---- --------

----- -------------- ------- --------------- -
  -------- -
    ------ -
      -----
        -------- ---------------------
        ------- --------------------
      ------
    --
  -
-

在子组件中,我们通过 this.props 来访问父组件传递的参数。这个例子中,我们分别打印了传递过来的 nameage 参数。

子组件中修改父组件参数的方法

有时候,我们需要在子组件中改变父组件传递过来的参数。但是,React 中是不允许直接修改父组件的 props 的,这是因为 props 是父组件传递给子组件的不变值。如果你想在子组件中修改传递过来的参数,你需要做一些额外的工作。

在子组件中改变父组件的传递参数,最简单的方式就是通过回调函数来实现。我们可以通过 onClick 或者 onChange 等事件触发回调函数,然后将子组件中改变的参数传递给父组件的回调函数。父组件接收到回调函数后,再通过 setState 的方式更新子组件中的 props。

-- -------------------- ---- -------
------ ----- ---- --------

----- -------------- ------- --------------- -
  ----------- - -- -- -
    --------------------------------
  -

  -------- -
    ------ -
      -----
        -------- ---------------------
        ------- --------------------
        ------- ----------------------------- -------------
      ------
    --
  -
-

----- --------------- ------- --------------- -
  ----- - -
    ----- -------
    ---- --
  -

  ---------------- - ------ -- -
    --------------- ---- ---
  -

  -------- -
    ------ -
      --------------- 
        ---------------------- 
        -------------------- 
        ------------------------------------ 
      --
    --
  -
-

在上例中,我们传递了一个名为 onChangeName 的回调函数给子组件 ChildComponent。在子组件中的 handleClick 函数中,当按钮被点击时,我们通过 onChangeName 回调函数将新的名字 "Lily" 传递给父组件。在父组件接收到传递的新名字后,我们通过 setState 更新父组件的 name 状态。这样一来,ChildComponent 就能够获取到更新后的 name 参数了。

总结

在 React 的组件化开发中,props 是一种非常常见而且实用的参数传递方式。通过这种方式,我们可以方便地将参数从父组件传递给子组件。通过回调函数的方式,我们也能够在子组件中修改父组件的参数。因此,在 React 中熟练掌握使用 props 是很重要的。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645b95a1968c7c53b0de302f

纠错
反馈