关于 React 钩子的炒作。信息太多我还是不知道:钩子的出现是否意味着像 Redux 这样的库可以被扔进垃圾箱?
到目前为止,我的理解是钩子对有状态的功能组件很有用,那么共享状态呢?
关于 React 钩子的炒作。信息太多我还是不知道:钩子的出现是否意味着像 Redux 这样的库可以被扔进垃圾箱?
到目前为止,我的理解是钩子对有状态的功能组件很有用,那么共享状态呢?
不,钩子并不能完全消除对 Redux 的需求。Hooks 主要是作为实现我们今天必须使用类的功能的替代方案:
除了上述之外,钩子还提供了一种在组件之间共享有状态逻辑的更简单的方法。
更有可能杀死/替换 Redux 的是上下文而不是钩子,这是一种跨组件共享状态的方式。但是 IMO 上下文不如 Redux 存储强大,因为 Redux 除了共享状态存储(例如中间件和具有时间旅行功能的专用开发工具)之外还提供其他功能。还有一个围绕 Redux 构建的完整的学习和工具生态系统,据我所知,目前还没有上下文。
如果您将useReducer
钩子与本例中的上下文结合使用,它与使用 Redux 非常相似,对于小型应用程序(如 TodoMVC),它可能就足够了。对于大型应用程序,我不认为只有一个上下文useReducer
就足够了。你可能需要多个,这就是使用 Redux 和组合存储的地方。你也可以组合多个上下文和useReducer
钩子,但只使用 Redux 可能会更干净。
不,Hooks 不会取代 Redux,但它们可以帮助您编写更简洁的代码,并且您不需要编写类组件只是为了使用本地状态或生命周期方法。这是一个很好的用例。
在过去,您必须使用 Redux 来确保在组件的每次重新渲染之间保持状态。但是现在你可以只使用 useState() 方法来实现一个持久的本地状态!您可以使用 useEffect() 代替 React 生命周期方法,并且可以使用 useReducer 编写快速操作创建器方法并访问全局状态!
是的,但它看起来仍然不是官方功能。它仍在功能提案中。阶段。许多人认为 react context 会将 redux 转储到垃圾中,但事实并非如此。
请注意,Redux 只是状态管理。不是反应库。你可以在任何你想要的项目中使用 Redux。
将来,redux 连接器(react-redux)可能会被钩子杀死或不使用,但 Redux 本身是一个很棒的库,因为它在一个必须处理大量数据并由大量开发人员开发的应用程序中带来了顺序.
可能有更多不需要 Redux 的用例,但不,Hooks 和 context 都不会“杀死” Redux。
我在一个企业应用程序中使用 Redux,以前,它是一团糟,没有事实来源。Redux 在代码库和逻辑中排序。
Hooks 和 Context 不能代替 Redux 来管理应用程序状态。
上下文更类似于道具,因为它解决了在大型、高度嵌套的企业级应用程序中从父级到子级传递信息的噩梦。缺点是 Context 有点复杂,设置起来会很痛苦。
Hooks 只是允许我们使用现在可以挂钩到应用程序状态的功能组件,而无需将它们转换为基于类的组件。
令人困惑的是,您可以使用钩子从 Redux 中获取功能,就像useReducer
没有传统的 Redux 设置一样。
因此,如果您正在开发博客应用程序并且想要添加更新博客文章的功能,您可以useReducer
像这样申请:
const blogReducer = (state, action) => {
switch (action.type) {
case 'add_blogpost':
return [...state, { title: `Blog Post #${state.length + 1}` }];
default:
return state;
}
};
所以这将是你的减速器,然后你会像这样应用它:
export const BlogProvider = ({ children }) => {
const [blogPosts, dispatch] = useReducer(blogReducer, []);
你可以临时创建一个辅助函数来调度一个动作对象:
const addBlogPost = () => {
dispatch({ type: 'add_blogpost' });
};
您必须将其添加到您的价值道具中,即'add_blogpost'
. 无论如何,它只是在功能组件上使用 Redux 的各个方面而不使用整个 Redux 系统本身的一种令人困惑的方式,但同样,它不是替代品。