当前位置: 首页 > 面试题库 >

如何将无价值的道具传递给组件

闻梓
2023-03-14
问题内容

一个人如何将没有价值的道具传递给反应成分?

<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所述,如果您要传递“空道具”,则可以简单地为其赋予值nullundefined

因此,您可以执行以下操作:

<SomeComponent disableHeight={null}>
    {({width}) => (
        <AnotherComponent
            autoHeight={null}
            width={width}
            height={300}
            {...otherProps}
        />
    )}
</SomeComponent>

虽然我会注意到,把它当作undefined是可能完全不必要的,因为阅读this.props.autoHeightAnotherComponent总会给你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的方式,也不是一个好主意。我换了答案。