你们觉得前端的“状态”和“状态管理”指的是什么?

2020-07-05 11:10:52 +08:00
 marcosteam

最近在写一个网站的新前端,需要用到大量数据之间的交互,记得这个是要用到状态管理的,然后去看了 Vuex 和 Redux,网站里面都在讲 State,Store,翻了一下知乎还有 V2EX 看看为什么需要状态管理,回答一般都是“跨组件管理状态”,这个回答真的很云里雾里,没有做到很好的解释什么是“状态”,什么是“状态管理”。那你们眼里的状态是什么?什么时候需要状态管理这个东西?

我个人的观点:状态管理统一管理就是各个组件之间公用的数据源,类似于一个数据库,组件需要什么数据要统一从状态管理库(比如 Vuex 和 Redux 中获取),同时状态管理还可以根据需求实时的更新 Store 里面的各种数据。而状态就是组件里私有的变量。

4406 次点击
所在节点    问与答
28 条回复
jsun
2020-07-05 21:01:47 +08:00
就是一个全局变量或者说叫单例模式,然后搞了很多更新全局变量的方法,起了很多名词,弄得很乱
anguiao
2020-07-05 21:09:38 +08:00
状态就是全局变量,状态管理就是让你更方便、安全地使用这些全局变量。
这就是我现在粗浅的理解了,其他的技术名词我也说不上来。
Mutoo
2020-07-05 21:12:57 +08:00
Redux 、Vuex 这类状态管理的主要思想为 Single source of truth 意为“单一信任源”(@theRealWhexy 不是什么“真值来源”)。统一管理数据,有利于数据的完整性和一致性。

另外通过 FLUX-like 的单向数据流模型,确保数据只能从 Store 流向组件,并且 Store 只能被 Action 修改。这样组件职责更加单一,更容易维护。
janus77
2020-07-05 21:14:46 +08:00
状态就是全局变量。
状态管理,就是需要一套专门的东西来做了,这个全局变量只是一个最简单条件下的解决方案,随着场景的复杂需要更好的方案,这些方案的研究和发展就叫做状态管理
EminemW
2020-07-05 21:38:08 +08:00
全局变量,使用状态管理可以在变量数据发生改变时,通知使用该变量的组件重新渲染?
theRealWhexy
2020-07-06 00:11:02 +08:00
@Mutoo single source of truth 的翻译我还是斟酌了很久的,你这个我也不太满意。
Mutoo
2020-07-06 08:19:49 +08:00
@theRealWhexy (数据的)单一可信源,或者直接意译为单一数据源也可以。
no1xsyzy
2020-07-06 14:02:14 +08:00
状态就是任何可变的部分( moving parts )或其任何的组合。该词有可能启发自图灵机或者 FSM (状态转移)
状态管理就是通过单独的模块来管理(几乎)一切状态,包括但不限于 CRUD 。一个明显的好处是渲染方式和状态逻辑的正交化。换句话说,通过状态管理,你可以多处引用同一状态进行各种操作而不必考虑并发读写之类的问题。结果之一就是这些状态看上去 “全局” 了,但严格地说,是把 CRUD API 同时传到所有组件身上。
至于说 “几乎”,是因为确实有些状态没必要甚至不适合全局管理,尤其是随时可能以任何形式被复用的组件内部状态。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/687264

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX