Skip to content

className default is lost when props.className is undefined in UncontrolledTabs #581

Description

@benjaminliugang

In the UncontrolledTabs component, default props are merged using object spreading:

const { className, ...attributes } = { ...defaultProps, ...props, };

Even the defaultProps.className is defined ('react-tabs') and props.className is explicitly undefined, the spread operation will overwrite the default and set className to undefined.

As a result, the default class name is lost. It's unclear whether this behavior is intended, but it can lead to unexpected issues, especially when upgrading from older versions where the default class was always applied. Projects relying on the default 'react-tabs' class for styling or selectors may break silently.

Activity

  1. Shiva903-hue commented on Jan 13, 2026

    @Shiva903-hue

    Hi, thanks for the clear report.
    I’m interested in working on this, but wanted to confirm expected behavior before proposing a fix:
    Should the default className be preserved when props.className is undefined?
    Or is the current behavior intentional, and the fix would require guarding against explicit undefined overrides?

    Depending on the answer, I can propose a backward-compatible fix and add tests.

  2. danez commented on Jan 13, 2026

    @danez
    Collaborator

    It is inteded that when the className is set to a string it should overwrite. If it is set to undefined and null it should not.

  3. Shiva903-hue commented on Jan 14, 2026

    @Shiva903-hue

    Thanks for confirming! I’ll work on a fix that preserves the default className when props.className is null or undefined, and add tests to cover this behavior.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions