【发布时间】:2019-08-04 05:08:09
【问题描述】:
我正在尝试在 Material-UI 文档中实现类似于浮动操作按钮 (FAB) 的功能:
https://material-ui.com/demos/buttons/#floating-action-buttons
他们有类似的东西:
<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方法呢?
鉴于我的列表组件位于选项卡内,而 FAB 位于整个选项卡结构之外,我不确定如何实际实现将项目添加到列表单击事件处理程序。
据我所知,我可以:
- 找到一种方法来连接父/子以通过各个级别传递事件处理程序(例如How to pass an event handler to a child component in React)
- 找到一种方法来更好地组合组件/层次结构以将职责置于正确的级别(例如,使用功能组件删除组件并将其与
this放在同一个文件中?)
我见过人们使用ref,但这感觉很老套。我想知道它应该在 React 中是如何完成的。如果该示例再进一步,并显示 FAB 的事件处理应该驻留在哪里,那就太好了。
提前感谢,一如既往,我会发布我最终要做的事情
【问题讨论】:
-
这是一个相当广泛的问题。有很多可能的方法来组织功能,您的示例目前没有提供任何关于自定义组件的性质或 FAB 执行的操作类型的见解。在某些情况下,两者之间不需要任何直接的交互。这在很大程度上取决于您的整体状态管理方法。
-
感谢@RyanCogswell,我已将我的问题更新为更具体。如果您对如何管理列表的状态有任何想法,同时在子组件外部添加按钮,我将不胜感激!
标签: reactjs event-handling components material-ui