使用 enum 进行条件渲染时 React 渲染不可见组件

React rendering invisible components when using enum for conditional rendering

我有一个 React 组件需要有条件地渲染其他两个组件之一,如下所示:

render() {
  const displayMode = this.props.condition ? 'a' : 'b';

  return (
     <div>
        {{
           a: <AComponent />,
           b: <BComponent userData={this.props.userData} />
        }[displayMode]}
     </div>
  );
}
...

BComponent 需要 AComponent 不需要的数据,因此当 AComponent 呈现时数据不可用。意外的行为是,即使只有 AComponent 应该呈现,我也会收到有关缺少仅 BComponent 所需数据的错误。

简而言之,当我使用对象枚举时,两个组件总是在渲染。

如果我将其切换为以下内容:

render() {
  const displayMode = this.props.condition ? 'a' : 'b';

  return (
     <div>
        {displayMode === 'a' && (
           <AComponent />
        )}

        {displayMode === 'b' && (
           <BComponent />
        )}
     </div>
  );
}
...

那么我就没有这个问题,只有预期的组件正在呈现,我没有收到任何关于其他组件所需数据的错误。

所以,这可行,但我更喜欢使用对象枚举的更清晰的代码。我的问题是为什么会出现奇怪的行为,这是预期的吗?

谢谢!

2个解决方案的区别在于执行顺序。第一种情况,创建了一个新对象,有2个key a & b,以及对应的组件AComponentBComponent,然后取出key匹配的值displayMode。在第二种情况下,首先验证 displayMode ,并根据其值,是否采用第二个条件。它类似于执行: !!undefined && undefined.raiseNoError - 第二个条件被忽略,因为它没有通过第一个条件。