我已经使用ReactJS完成了一个小型Web应用程序。它很容易维护和理解。现在我学会了Redux并计划在其中实现。 需要一些额外的东西(例如创建store、Reducers等)。我个人认为,没有Redux也可以使用React来轻松理解和维护状态。那么为什么我们还需要额外的东西(Redux)呢?
我已经使用ReactJS完成了一个小型Web应用程序。它很容易维护和理解。现在我学会了Redux并计划在其中实现。 需要一些额外的东西(例如创建store、Reducers等)。我个人认为,没有Redux也可以使用React来轻松理解和维护状态。那么为什么我们还需要额外的东西(Redux)呢?
Redux的使用原因:
同一部分应用程序状态需要映射到多个容器组件中。
一个很好的例子是会话状态。当应用程序首次加载时,通常需要与标题栏和每个页面中的各种组件共享关于用户的信息。这些组件可能没有直接联系,因此Redux提供了一种方便的方式来共享状态。
全局强大的文本组件可在任何地方访问。
通常有一些组件是应用程序的生命周期(对于单页应用程序,这是每次重新加载入口点时)存在的,它们会执行一些操作,例如显示通知、snackbar、工具提示、模态框、交互式教程等。使用Redux,您可以创建动作以向这些组件发送命令,因此,例如,如果代码向后端发出异步请求并且请求失败,则可以分派一个显示snackbar的动作。 如果没有使用Redux,则需要其他事件系统或每次使用时都必须实例化snackbar组件。
如果一个高级组件提供了十几个props,但只使用了其中的两个,并将其余的传递给低级组件,则考虑使用Redux进行重构。这种情况在仅提供布局样式但不需要大量数据或配置的包装器组件中经常发生。在这种情况下,直接将Redux侧链到低级组件中更加实用。通过多个层次的组件传递太多props。
但是有很多情况下你不需要使用redux,重要的是要理解它的作用以及为什么需要它。
在过去的几年里,我个人没有在任何项目中使用Redux。未来也不打算使用。原因如下:
2015年Redux出现时是一次革命性的事件。它为React带来了两个重要的概念:
Redux在底层使用了context API,但当时它只是为React内部使用而设计的,使用起来很麻烦。
快进到2019年,很多事情都发生了变化。我们现在有了hooks和稳定的公共context API,已经准备好投入使用了。通过useReducer hook,现在可以轻松地使用action-reducer模式。我们不再需要Redux了。
现代的React context API比以前更简单、更高效,并且支持hooks。在大多数情况下,将应用程序状态包装在上下文中就足以让你在应用程序的任何地方访问它。
那么Redux呢?
在我看来,在绝大多数情况下,您不再需要Redux。Contexts和hooks在大多数情况下都能胜任。如果您仍然认为contexts不太友好,可以看一下unstated-next库,它只是一个基于context API的薄包装器。整个库只有200字节!
但是,如果:
那么将Redux插入到您的项目中可能是有必要的。
在这种情况下,请确保您知道自己在做什么。Redux的魔力是有代价的。
Redux是一个复杂的东西。它会给您的应用程序带来很多复杂性。其中一些复杂性是显而易见的,而许多其他不明显的陷阱则是隐藏的并等待着你去发现。如果您想处理这个问题,请三思而后行。即使如此,也值得检查其他选择,例如MobX或react-sweet-state。
来源:您可能不需要redux
React 自带所有功能,可以处理您的状态,无需单独添加任何库。大多数应用程序状态都不应该是全局的,因为它们可以在组件旁边的 useState
或 useReducer
或自定义 hook 中很好地存活。
所以在你深入了解高级状态管理(例如 Redux)之前,请考虑使用 React 开箱即用的工具。
如果您有兴趣了解更多信息,我建议阅读 Andy Fernandez 的这篇文章:https://www.scalablepath.com/react/context-api-vs-redux