javascript - 如何拆分大型 React 组件?

标签 javascript reactjs react-redux

我正在通过编写纸牌游戏纸牌来学习 React。我渲染游戏板和卡片的主要组件已经变得非常大(700 行并且还在不断增加)。

其中很大一部分都是与动画相关的,我想将所有与动画相关的方法放入不同的文件中。

我不知道如何在 React 中解决这个问题。如果我在 Ruby 中执行此操作,我只需创建一个辅助模块,导入该模块并调用该模块上的函数。创建一个辅助文件并将函数放入其中似乎在 React 中不起作用,因为我无权访问这些函数中的“this”。

你会如何处理react中的这种情况?当人们想要分离出 React 组件中的逻辑时,通常会使用什么模式?

编辑 1(添加示例组件):

我已经阅读了 React 文档并且已经在使用 Redux。我的问题是我有很多动画和 UI 使用 JavaScript 来移动。这是我正在讨论的组件的链接:

https://gist.github.com/holgersindbaek/b8f134306148d12995dadf5e28d2d5b7

我将游戏的当前状态保留在组件“状态”中。一旦 Redux 状态发生变化, Prop 就会更新并启动动画(将卡片从旧位置“state”移动到新位置“props”。动画完成后,组件的状态就会更新,因此与 Prop 。

我的问题是该组件中有很多非必要的代码,这些代码本质上只是在屏幕上移动东西(initializeNewGame、initializeInteract、positionCardsOnBoard)。您将如何处理此类方法?

编辑2(我想我已经弄清楚了):

我决定将一些动画函数放在辅助文件 (animationHelper.js) 中,然后将其导入到 React 组件中并将其绑定(bind)到组件,这样我就可以在动画函数中引用“this”。我更新了示例以反射(reflect)新的更改:

https://gist.github.com/holgersindbaek/b8f134306148d12995dadf5e28d2d5b7

这对我来说似乎是一个很好的解决方案。我这样做是否违反了任何最佳实践?

最佳答案

我认为你需要类似 Redux 的东西。 Redux 可以帮助您保持代码的可扩展性和可维护性。基本上,Redux 允许您将每个组件分成两部分(或文件),一个用于 View (组件),另一个用于业务逻辑(容器),这可以帮助您轻松测试代码。 Redux是一种单向数据流的设计模式。

另外,你可以应用一些S.O.L.I.D. principles ,为每个组件应用单一职责。

可以查看真实示例here .

关于javascript - 如何拆分大型 React 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45156003/

相关文章:

javascript - 多个动态创建的按钮,单击时使用相同的功能,但动态获取源参数

javascript - 当我运行 react.js 代码时,我有这个错误说 "Cannot update a components while rendering a different component"

javascript - 从 redux 中的 reducer 取回 ID

reactjs - React状态下 "Too much data"被认为是什么

javascript - 更新 KnockoutJS 关联 observableArray 值

javascript - 将其他 dom 元素操作包含到另一个 dom 元素操作中是一种很好的做法,就像 javascript 中的通用操作一样

javascript - 一定时间差后更改格式.fromnow() momentjs方法

javascript - 如何让这个按钮来重置这个 react 组件中的计时器?

javascript - 更改 react 组件的可见性

javascript - redux、react-redux、redux-thunk 之间有什么区别?