这两种方法有什么区别?
将按钮的文本作为 prop 传递
<TextComponent title="Save"/>
function TextComponent(props){
return <button>{props.title}<button/>
}
vs
作为孩子传递文本
<TextComponent>Save<TextComponent />
function TextComponent(props){
return <button>{props.children}<button/>
}
6条答案
按热度按时间xmjla07d1#
children
prop是当需要在子组件中呈现的结构不固定并且由呈现它的组件控制时使用的东西。然而,如果组件的行为在其所有呈现中是一致的,则它可以定义它需要的特定 prop ,并且父组件可以将它们传递给它。
一个非常简单的例子是可以使用
children
的Navbar
。对于Navbar
,它需要呈现的项以及项的顺序或对齐方式取决于它在不同示例或不同页面中的使用方式。例如,Navbar
可以在某个地方有搜索组件,而在其他地方没有它。此外,菜单有时可能需要在左侧,然后是右侧的登录菜单项和它们之间的搜索栏,有时它们可能都出现在右侧而没有搜索栏。在这种情况下,父组件可以控制内部结构的方式kqqjbcuj2#
如果你不知道
children
,你应该使用children
。https://reactjs.org/docs/composition-vs-inheritance.html在这里,如果你知道你会在你的子组件中使用一个标题,只需要使用一个命名的prop。
如果你问自己这个问题“好吧,但是那个通用组件会呈现什么呢?“是应该使用
children
的时候rfbsl7qr3#
您在一个充当容器的组件上使用
props.children
,并且该组件事先不知道其子组件。基本上,
props.children
用于在调用“containing”组件时,显示在该组件的开始和结束标记之间包含的任何内容。h7appiyu4#
正如React官方文档中提到的:
有些组件无法提前知道它们的子组件。这对于表示通用“框”的边栏或对话框等组件尤其常见。
我们建议此类组件使用特殊的childrenprop将子元素直接传递到其输出中:
简单地说,它只是显示在开始和结束标记之间的任何内容。
正如你的问题中所问的,在你指定的用例中没有**太大的区别。
但是,假设你有一个小的左图标组件,然后通过'标题'作为一个单独的 prop 将更有意义。
l5tcr1uw5#
当你知道你的 prop 是什么,使用 prop 。否则,使用子项(又名containment)。
除此之外,在你的情况下使用props/children取决于你想要传递的内容:
1.如果它是一个单一的 prop (如
item
),那么你选择哪种方法都没关系。1.否则,你应该检查你在
children
中传递的是什么,因为你可能会传递其他你不想呈现的值。**我建议使用选择性方法(例如
props.title
),因为您总是知道组件内部发生了什么。ubof19bj6#
学究式地说,当我传递一个是子对象的东西时,我使用子对象,当我传递一个属性时,我使用一个 prop 。这里有一个例子。
现在我想添加一个忘记密码按钮,我选择将其定义为
LoginForm
的子项。LoginForm
内部的JSX中,因为按钮与组件状态完全无关。onSubmit
回调,也不是一个样式,也不是调整LoginForm
的表单方面的东西。所以我用了一个孩子。