我一直在阅读一些redux教程,说实话,直到现在我才看到它带来了什么附加值.

据我所知,我可以只使用react构建应用程序并管理其状态,那么,是什么让redux值得使用呢?

我承认redux比react有一些优势,即:

  • 跟踪所有已执行的操作;
  • 由于前一点,使得调试更容易;
  • 防止状态在组件之间向下/向上传递.

但可能是由于我缺乏开发大型应用程序的经验,我不相信这会让我的生活更轻松.

你能详细说明一下使用redux比普通react的优势吗?

推荐答案

在我脑海中,有几个优点:

  • 很多时候,你的应用程序的状态树可能与UI树有很大不同
  • 许多组件可能需要访问相同的状态,并以不同的方式显示
  • 热重新加载组件将清除现有组件树,包括其中存储的任何状态.将状态与UI树分开,可以将UI树调出,并使用更新的组件重新加载,同时保持当前的开发状态不变.

这是在讨论许多常见的好处之前,比如可预测的状态更新、时间旅行调试、改进的可测试性和集中化逻辑.

当然,除了React的组件状态,你什么都不用写就可以编写整个应用程序(Dan Abramov自己也说,人们经常过早地跳入Redux),但在我看来,Redux绝对值得.

edit

我在全栈React网站Redux and Why It's Good For You上写了一篇文章,对这个答案进行了扩展.

Reactjs相关问答推荐

React路由子路由将其重定向到带有参数的错误URL

使用包装器组件时useState onChange的问题

如果Next JS中使用await,monaco-editor将继续加载

sourceBuffer. appendBuffer成功,但h5视频播放器卡住了

如何通过浏览器路由在单独的.jsx文件中使用MUI抽屉?

替换谷歌 map api默认信息窗口与自定义

需要特定的数学函数来标准化动画持续时间

shadcn输入+窗体+Zod;一个部件正在改变要被控制的不受控制的输入;

我无法通过 useContext 显示值

修改React数据表扩展组件

Firebase查询返回随机用户数据,而不是过滤后的用户数据

React 测试库包装器组件

如何在react 中正确销毁上下文?

React Final Form - 单选按钮在 FieldArray 中不起作用

React Native PermissionsAndroid 不包括 READ_MEDIA_IMAGES.如何解决这个问题?

在 Formik 表单中访问子组件的值

Cypress ,重试不再附加到 DOM 的元素

React Router v6 - 访问嵌套路由和处理手写 url 的正确方法

如何使用 cypress 获取 MUI TextField 的输入值?

React - useParams() 不会失败 null / undefined 判断