Skip to content

Accordion Items wrapped in a fragment cannot have children with <Show when={}> behaviour #78

@jakst

Description

@jakst

See Stackblitz reproduction repo here: https://stackblitz.com/edit/solidjs-template-r95c6s?file=src/App.tsx

If I have an Item in the accordion that's wrapped in a fragment, the <Show when={}> component directly within the fragment does not react to state updates.

Here's the relevant code from the Stackblitz

import { Item } from '@solid-aria/collection';
import { createSignal, Show } from 'solid-js';
import { Accordion } from './Accordion';

/**
 * There are two accordion items in here, one wrapped in a
 * fragment, and one wrapped in a div. When pressing the
 * trigger button, the text to the right of it should
 * disappear/appear, because it's wrapped in a 
 * <Show when={visible()}></Show>. On the one wrapped in a 
 * div it does, but the one wrapped in a fragment you have to
 * collapse & expand the Item header once to trigger the 
 * state update.
 *
 * The accordion code is a straight copy/paste from https://github.com/solidjs-community/solid-aria/blob/main/packages/accordion/README.md
 */

export default function App() {
  const [visible, setVisible] = createSignal(true);

  return (
    <Accordion>
      <Item key="fragment" title="With fragment wrapper">
        <>
          <button
            style={{ color: visible() ? 'green' : 'red' }}
            onClick={() => setVisible((v) => !v)}
          >
            Trigger
          </button>

          <Show when={visible()}> - Should appear/disappear</Show>
        </>
      </Item>

      <Item key="div" title="With div wrapper">
        <div>
          <button
            style={{ color: visible() ? 'green' : 'red' }}
            onClick={() => setVisible((v) => !v)}
          >
            Trigger
          </button>

          <Show when={visible()}> - Should appear/disappear</Show>
        </div>
      </Item>
    </Accordion>
  );
}

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