一个人如何将没有价值的道具传递给反应成分?
<SomeComponent disableHeight> {/* here */}
{({width}) => (
<AnotherComponent
autoHeight {/* and here */}
width={width}
height={300}
{...otherProps}
/>
)}
</SomeComponent>
注意-没有为这些道具指定默认道具值。
我似乎找不到关于它的任何引用,但是通过观察这些属性的值(它们true
在默认情况下会分配给它们)。
编译器将您传递的内容解释为布尔值属性。编写纯HTML时也是如此。没有值的属性被解释为布尔值true
。由于JSX是用于编写HTML的语法糖,因此具有相同的行为是有道理的。
官方的React文档包含以下内容:
布尔属性
当使用具有禁用,必需,选中和只读的属性的HTML表单元素时,通常会出现这种情况。省略属性的值会使JSX将其视为true。要传递false,必须使用属性表达式。
// 这两个 在JSX 中 等效 于禁用按钮
<input type="button" disabled />; <input type="button" disabled={true} />;
// 这两个 在JSX 中 等效 ,因为它们不禁用按钮
<input type="button" />; <input type="button" disabled={false} />;
JSX:
<div>
<Component autoHeight />
<AnotherComponent autoHeight={null} />
</div>
JS:
React.createElement(
"div",
null,
React.createElement(Component, { autoHeight: true }),
React.createElement(AnotherComponent, { autoHeight: null })
);
在此处查看babel演示。
如ctrlplusb所述,如果您要传递“空道具”,则可以简单地为其赋予值null
或undefined
。
因此,您可以执行以下操作:
<SomeComponent disableHeight={null}>
{({width}) => (
<AnotherComponent
autoHeight={null}
width={width}
height={300}
{...otherProps}
/>
)}
</SomeComponent>
虽然我会注意到,把它当作undefined
是可能完全不必要的,因为阅读this.props.autoHeight
从AnotherComponent
总会给你undefined
,如果你不管通过明确其作为autoHeight={undefined}
或不尽然。null
在这种情况下,传递可能会更好,因为您通过声明道具具有…“
no value”(即null
)的值来显式传递道具。
问题内容: 我试图找到定义可以以一般方式使用的组件的正确方法: 当然,可以想象并在父组件和子组件之间进行渲染的逻辑。 对于这个问题,这是一个虚拟的实现: 问题是,每当您用于定义包装器组件时,如何将某些属性传递给其所有子组件? 问题答案: 用新道具克隆Children 您可以使用React.Children遍历子级,然后使用React.cloneElement使用新的道具(浅合并)克隆每个元素,例如
我使用的是dev-express中的react-grid库,库中有一个表组件,我们可以向它传递单元格组件,在CustomCell中,我使用的是Material UI中的菜单 在上述情况下,菜单工作良好, 但是我想要传递道具到这个组件,我尝试了以下操作 在这种情况下菜单不工作,我想知道是否有一个替代的方法来实现第二种情况。
我是一个相当新的反应,这是一个我正在努力解决的问题。
问题内容: 我正在尝试找到定义可以以一般方式使用的某些组件的正确方法: 当然,您可以想象并作为该逻辑的示例,在父组件和子组件之间存在一种渲染逻辑。 对于这个问题,这是一个虚拟的实现: 问题是,每当您用于定义包装器组件时,如何将某些属性传递给其所有子组件? 问题答案: Cloning children with new props 您可以使用React.Children遍历子级,然后使用React.
问题内容: 我需要使用路由器将道具传递到组件。这是我的代码: 如您所见,isAuthenticated我想传递给Login组件的道具。 当我登录道具时, isAuthenticated 道具不存在。我做错了什么?如何正确通过道具?我关注了文档以及其他讨论。据我了解,它应该可以工作。的版本 做出反应路由器 和 反应路由器- DOM 是 4.0.0 问题答案: 像这样传递它: 它应该在“登录组件”中可
也许有一种方法可以将组件绑定到事件? 在使用React一年多后,在Sebastien Lorber的回答的激励下,我得出结论,将子组件作为参数传递给父母中的函数实际上不是React的方式,也不是一个好主意。我换了答案。