E408 React key warning when children is returned from transforms · Issue #373 · reactabular/reactabular · GitHub
[go: up one dir, main page]

Skip to content

React key warning when children is returned from transforms #373

@jsphstls

Description

@jsphstls

Hey all,

I really like reactabular's API. So far I have used it to create tables with expandable rows, selectable rows, and a scrollable table without fixed column widths. Everything has been smooth until I started using transforms to make accessible sort controls in column headers. Specifically, I am seeing a warning when I start using transforms with children:

Warning: Each child in a list should have a unique "key" prop. See https://fb.me/react-warning-keys for more information.
    in button (created by HeaderRow)
    in th (created by HeaderRow)
    in tr (created by HeaderRow)
    in HeaderRow (created by Header)
    in thead (created by Header)
    in Header (at Table.js:59) // my custom <Table>
    in table (created by Provider)

Part of columns:

header: {
  transforms: [() => ({
    children: (
      <button>
        {label}
        <Something
          key={1} // adding a key to one item silences the warning
        />
      </button>
    )
  })
  ]
}

Button has two children. The error does not occur when there is one child. The children are not in a list.

I "think' the problem is due to transformedProps.children being the result of a list creation.

List creation:

return mergeWith(mergeWith({}, firstProps), ...restProps, (a, b, key) => {
if (key === 'children') {
// Children have to be merged in reverse order for Reactabular
// logic to work.
return { ...b, ...a };
}

transformedProps.children usage:

return React.createElement(
renderers.cell,
{
key: `${columnIndex}-header`,
...mergeProps(
props,
header && header.props,
transformedProps
)
},
transformedProps.children || evaluateFormatters(formatters)(label, extraParameters)
);
})
)

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

      0