当前位置: 首页 > 知识库问答 >
问题:

尝试重用组件并使属性有条件

柴增
2023-03-14

我正在应用程序中使用React Datepicker。默认情况下,我希望使用“内联”功能,以便在加载页面时始终显示日历。我是这样做到的:

<DatePicker
    inline
    selected={ startDate }
    onChange={ onChange }
/>

我传递starDateonChange属性从我的App.js文件。

一切都很顺利。

接下来,我想让我的第二页使用相同的组件——因为这似乎是一件合乎逻辑的事情。但是,我希望日历仅在单击输入时触发。我将选择的日期传递到下一页,因此文本字段填充为mm/dd/yyyy

我想给用户选择不同日期的选项,所以如果他们点击输入,日历就会呈现。在这种情况下,我不希望组件上的内联属性。

我尝试过这样的事情,但运气不好:

<DatePicker
    inline={ inline }
    selected={ startDate }
    onChange={ onChange }
/>

传递内联作为truefalse。但这似乎行不通。或者,在这里只使用两个不同的组件是否更有意义?显然,我对反应开发非常陌生,所以当创建两个组件时,也许我只是试图用同样的事情做太多。

感谢您的任何建议!

编辑

谢谢你的建议!我发现这是有效的:

一个pp.js

 this.state = {
     inline: 'inline',
     startDate: new Date(),
      ...
}

<ReservationCalendar
    inline={ this.state.inline }
    startDate={ this.state.startDate }
    onChange={ this.handleChange }
 />

预订日历。js

const ReservationCalendar = ({inline, startDate, onChange}) => (
    <div>
        <Calendar
            inline={ inline }
            startDate={ startDate }
            onChange={ onChange }/>
   </div>
);

日历js

const Calendar = ({inline, startDate, onChange}) => (
    <div>
        <DatePicker
            inline={ inline }
            selected={ startDate }
            onChange={ onChange }
        />
    </div>
);

在"第2页"我想有这样的东西:

const Calendar = ({inline, startDate, onChange}) => (
    <div>
        <DatePicker
            inline={ false }
            selected={ startDate }
            onChange={ onChange }
        />
    </div>
);

显然,这不是正确的语法,但我想将inline设置为false/删除该属性。我不确定在哪里/如何设置-在较低的组件级别。

共有1个答案

龙高歌
2023-03-14

你肯定不想仅仅因为有一个额外的道具集就创建单独的组件,让道具可配置并分解成组件,例如。

const props = {
  inline: // true / false, some conditional check,
  selected: startDate,
  onChange
};
...
<DateTimePicker {...props} />;

如果true而不是iffalse,则应该呈现inline属性。

 类似资料:
  • 问题内容: 我正在使用“可拖动”指令来支持图像拖动。但是,根据用户的角色,我需要为某些用户组禁用图像拖动。我使用了以下代码。 该方法在模板范围内,并返回或。我不想为所返回的每个值创建两个大的重复元素。换句话说,我不是在寻找以下方法来解决此问题。 还有其他方法可以避免代码重复吗? 问题答案: Angular包含对有条件声明HTML属性的支持,作为动态标题指令。 的官方文件 例 在您的情况下,代码可能

  • 我想有条件地显示和隐藏这个按钮组,这取决于从父组件传递的内容,看起来像这样: .... .... 然而,{this.props.showBulkActions'show':'hidden'并没有发生任何事情。我做错什么了吗?

  • 我到处找,找不到我问题的答案。所以我想要一个只在特定条件下显示的条件属性,例如: 如您所见,我只想在等于默认值时指示按钮处于活动状态。然而,我得到了意想不到的令牌,错误... 但当我尝试将属性放在前面时,例如: 它传递语法错误并显示良好,但这不是我想要实现的。 我怎样才能解决这个问题?它没有通过的原因是什么? 因此,我刚刚发现在中,属性是的缩写,因此我使用 所以如果有人遇到这个问题,我就把它留在这

  • 更准确地说,我甚至想要更详细的东西:目标应该是一个包含三个属性的类,其中产生的目标值必须被拆分为三个属性。例如,如果mysource.propa的值为“abc”,那么目标myTarget应该得到一个类似于“v01.123.456.ab”的值。该值依次分为preValue、middleValue和endvalue: preValue=“V01” middleValue=“123.456”

  • 问题内容: 如果满足特定条件,是否有办法仅向React组件添加属性? 我应该在渲染后基于Ajax调用将required和readOnly属性添加到表单元素中,但是由于readOnly =“ false”与完全省略该属性不同,因此我看不到如何解决此问题。 下面的示例应解释我想要的内容,但将无法正常工作(解析错误:意外的标识符)。 问题答案: 显然,对于某些属性,如果您传递给它的值不真实,React足

  • 问题内容: 变量strCSSClass通常具有一个值,但有时为空。 我不想在此输入元素的HTML中包含空的class =“”,这意味着如果strCSSClass为空,我根本就不需要class =属性。 以下是执行条件HTML属性的一种方法: 有没有更优雅的方式做到这一点?具体来说,我可以遵循与元素其他部分中使用的相同的语法:class =“ @ strCSSClass”? 问题答案: 您没有从Ra