Я пытаюсь реализовать нечто похожее на кнопку с плавающим действием (FAB) в документации Material-UI:
https://material -ui.com / demos / buttons / # floating-кнопки действия
У них есть что-то вроде:
<SwipeableViews>
<TabContainer dir={theme.direction}>Item One</TabContainer>
<TabContainer dir={theme.direction}>Item Two</TabContainer>
<TabContainer dir={theme.direction}>Item Three</TabContainer>
</SwipeableViews>
{
fabs.map((fab, index) => (
<Zoom>
<Fab>{fab.icon}</Fab>
</Zoom>
));
}
У меня есть что-то вроде:
<SwipeableViews>
<TabContainer dir={theme.direction}>
<ListOfThingsComponent />
</TabContainer>
<TabContainer dir={theme.direction}>Item Two</TabContainer>
<TabContainer dir={theme.direction}>Item Three</TabContainer>
</SwipeableViews>
{
fabs.map((fab, index) => (
<Zoom>
<Fab onClick={ListOfThingsComponent.Add???}>
Add Item to List Component
</Fab>
</Zoom>
));
}
У моего ListOfThingsComponent
изначально был Add
Кнопка, и она работала отлично.Но я хотел следовать подходу FAB, как это было в документах.Для этого кнопка «Добавить» будет находиться за пределами дочернего компонента.Итак, как мне получить кнопку от родителя для вызова метода Add дочернего компонента?
Я не уверен, как на самом деле реализовать обработчик события click для добавления элемента в список, если мой компонент списка находится внутривкладка, в то время как FAB находится за пределами всей структуры вкладок.
Насколько я знаю, я могу либо:
- найти способ соединить родителя / потомка для передачи обработчика событийчерез уровни (например, Как передать обработчик событий дочернему компоненту в React )
- найти способ лучше составить компоненты / иерархию, чтобы перевести ответственность на правильный уровень (например, удалитькомпонент и поместите его в тот же файл с
this
в области видимости, используя функциональные компоненты?)
Я видел, как люди используют ref
, но это просто кажется хакерским.Я хотел бы знать, как это должно быть сделано в React.Было бы неплохо, если бы этот пример пошел немного дальше и показал, где должна находиться обработка событий для FAB.
Заранее спасибо, как всегда, я опубликую то, что я в итоге делаю