实际上我正在建立一个新项目,对选择流程感到困惑:
或
该项目属于高级和中型项目,可能会在不久的将来导致大型应用程序的产生或消失。
如果我选择选项1(useState + useReducer + useContext):
a。尚无useReducer中间件。由于它不是一个全局状态容器,因此很难在全球范围内应用这样的中间件。 b。还没有本机功能将所有减速器组合为一个终极减速器。
如果我选择选项2,则可以使用选项1无法提供的功能。
我发现,我们可以实施,我们可以在选项1中手动组合多个reducer。
import userReducer from './reducers/user';
import basketReducer from './reducers/basket';
const mainReducer = ({ user, basket }, action) => ({
user: userReducer(user, action),
basket: basketReducer(basket, action)
});
并且也可以实现中间件
import userReducer from './reducers/user';
import basketReducer from './reducers/basket';
const mainReducer = ({ user, basket }, action) => {
// middleware goes here, i.e calling analytics service, etc.
return {
user: userReducer(user, action),
basket: basketReducer(basket, action)
};
});
实际上,我在这里冻结选择哪种方式最合适?
如果我要使用Redux,则必须实现Redux,axios,saga,不可变的js或其他第三方库。 我将使用Redux的强大功能,并且还应该首先了解Redux的所有概念。因为我知道上下文+钩子。
官员们是否有计划将Redux中缺少的成分带入钩子+环境中?
答案 0 :(得分:1)
实际上我在这里冻结选择哪种方式最合适?
最理想的是,我俩都一样。它们都支持记忆。但是,Redux的优点是它在整个应用程序状态下都具有single source of truth。
官员们是否有计划将Redux中缺少的成分带入钩子+环境中?
Redux,Hooks,Context和Saga具有不同的目的/动机。
最终,出于以下原因,我建议您使用钩子+功能组件:
由于上下文提供者而消除了wrapper hell。
在功能组件中通过useEffect细化处理副作用(获取,订阅)。
答案 1 :(得分:1)
官员们是否有计划将Redux中缺少的成分带入钩子+背景?
不,这与它的 Design-Principles (设计原理)相矛盾,事实是您可以自己实现这些功能(不是很复杂),React的生态系统中有许多稳定而出色的状态管理员(例如redux
和mobx
)。
通用抽象(设计原则):通常,我们拒绝添加可以在用户环境中实现的功能。我们不想使用无用的库代码来夸大您的应用程序。但是,有一些例外情况。
实际上我在这里冻结选择哪种方式最合适?
这个问题太笼统了,它取决于您的应用程序逻辑,扩展性以及是否真的需要所有redux
功能。
请参阅SO问题 React Context vs React Redux, when should I use each one?
如果我要使用Redux,则必须实现Redux,axios,saga,不可变js或其他第三方库。
使用axios
(fetch
)和immutable
(freeze
)未绑定到redux
,也建议使用to not mutate data并使用应用程序中的不可变库。
此外,如上所述,在熟悉中间件之后,您不必将saga
与redux
集成在一起,具体取决于您的应用程序逻辑,完全需要saga
。