Vue封装keep-alive缓存功能

 博主博客:www.jwblog.cn
博主开源项目:www.openapijs.com

 

其实实现这个封装并不难,只需要通过v-if拿到router里边自定义的变量,通过自定义变量的Boolean值来控制 

Vue路由里边meta里边配置好控制的变量即可

在 React 中封装一个类似于 Vue 中的 `keep-alive` 的组件可以使用 React 的上下文(Context)和 React 组件的生命周期方法。 首先,创建一个上下文(Context)来保存需要缓存的组件的状态。这个上下文可以在应用的最顶层的组件中创建,如 App 组件。在这个上下文中,保存一个对象,用于存储需要缓存的组件的状态。 其次,创建一个高阶组件(Higher-Order Component),用于将需要缓存的组件包裹起来。这个高阶组件会在组件挂载时,在上下文中保存组件的状态,如果组件已经挂载过了,则直接从上下文中获取组件的状态。 最后,使用这个高阶组件来包裹需要缓存的组件即可。 一个简单的示例代码如下: ``` import React, { createContext, useContext } from 'react'; const CacheContext = createContext({}); function withKeepAlive(WrappedComponent) { return class extends React.Component { static contextType = CacheContext; constructor(props, context) { super(props, context); const { cache } = context; if (cache[WrappedComponent.name]) { this.state = cache[WrappedComponent.name]; } else { this.state = { ...this.state, mounted: false, }; } } componentDidMount() { this.setState({ mounted: true, }); } componentWillUnmount() { const { cache } = this.context; if (this.state.mounted) { cache[WrappedComponent.name] = this.state; } } render() { return <WrappedComponent {...this.props} />; } }; } function KeepAliveProvider({ children }) { const cache = {}; return ( <CacheContext.Provider value={{ cache }}> {children} </CacheContext.Provider> ); } function KeepAlive({ children }) { const KeepAliveComponent = withKeepAlive(children.type); return <KeepAliveComponent {...children.props} />; } export { KeepAliveProvider, KeepAlive }; ``` 使用时,可以将需要缓存的组件用 `KeepAlive` 组件包裹起来,并在应用的最顶层使用 `KeepAliveProvider` 组件包裹整个应用,如下所示: ``` import React from 'react'; import { KeepAliveProvider, KeepAlive } from './keep-alive'; function App() { return ( <KeepAliveProvider> <div> <h1>My App</h1> <KeepAlive> <MyComponent /> </KeepAlive> </div> </KeepAliveProvider> ); } function MyComponent() { // ... } export default App; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值