首页 文章

使用Flux架构中的内部事件创建可重用的React.js组件[关闭]

提问于
浏览
3

我正在遵循以下视频中的“容器和组件”方法,以在Flux架构中构建可重用的组件 .

React.js Conf 2015(22m 50s):https://youtu.be/KYzlpRvWZ6c?t=22m50s


例如,我正在使用“下一步”按钮构建图像滑块 .

ImageSliderContainer

  • 侦听ImageSliderStore并维护状态(例如,currentIndex)

  • 使用道具渲染ImageSlider

ImageSlider

  • 无状态组件,仅基于道具进行渲染

  • 有一个子组件NextButton

Next按钮

  • 无状态组件,仅基于道具进行渲染

  • 有onClick事件


在Flux架构中,单击NextButton将向商店发送操作 . 然后,商店将更新"currentIndex"并发出更改事件 . 在我看来,ImageSlider不再可重复使用,因为它与单个商店紧密耦合,通过该商店将通知单个容器 .

另一个选项是将状态"currentIndex"添加到ImageSlider组件 . 单击NextButton将通知ImageSlider更新其状态 . 但这会引入从NextButton到ImageSlider的反向数据流(违反Flux架构?) . 此外,它反对"containers and components"方法,其中组件只使用props呈现UI .

在Flux架构中制作可重用组件的最佳方法是什么?更具体地说,哪个元素(存储,容器,组件或其他东西)应该处理NextButton组件中发生的onClick事件?


编辑

根据答案,这里有一个满足Flux架构和“容器和组件”模式的解决方案 .

  • 容器拥有状态"currentIndex."该应用程序可能有多个容器,如ScreenshotSliderContainer和DebugSliderContainer,每个容器都维护自己的"currentIndex."

  • 容器将onClick处理程序作为prop传递给组件ImageSlider . onClick处理程序将一个动作发送到商店 .

  • ImageSlider组件是无状态的,将onClick处理程序传递给子组件NextButton .

  • 因此,NextButton中的onClick事件不会影响顶级组件ImageSlider . 只有容器使用新的道具呈现ImageSlider .

1 回答

相关问题