Есть разные варианты.
Классический реактовский сюжет - когда для каждого объекта рендерится компонент TreeItem, который отрабатывает клик и по клику сам загружает массив своих дочерних объектов. Этот массив хранится в локальном стейте. Но если дерево может не только разворачиваться, но и сворачиваться, то рендерить дочерние элементы не надо, и они размонтируются, с пропажей стейта - потом придется грузить заново. Если это беспокоит, то надо подумать о кэшировании. Или, например, использовать ReactQuery - он сам кэширует.
Если надо хранить весь набор данных вместе, то воспользуйся стейт-манагером. МобХ позволяет держать мутабельное дерево, в редаксе лучше нормализованный вид (чтобы не было лишних перерендеров).