React和Vue状态管理的区别

前端实例数据共享,vue有vuex而react则有redux,mobx等等。

使用vuex进行状态管理

我们现在vue项目,均采用vuex来做全局的状态管理,简单的理解就是你在state中定义了一个数据之后,你可以在所在项目中的任何一个组件里进行获取、进行修改,并且你的修改可以得到全局的响应变更,下面我们看看在项目中怎么使用它作状态管理,在此之前先看看vuex工作流程图。

                                         

首先,在src文件目录下新建一个名为store的文件夹,store文件夹里新建一个index.js文件,其次,需要在 main.js里面引入store,然后全局注入,之后就可以在组件里面使用this.$store。

搭好环境后,我们先在index.js里面,声明一个state变量,在实例化Vuex.Store时作为参数传入

//要设置的全局访问的state对象
const state={
  showFooter: true,
  changableNum:0
};
const store = new Vuex.Store({
   state
});
export default store;

之后,我们已经可以用this.$store.state.showFooter在个组件里面获取state值了,但这不是理想的获取方式;vuex官方API提供了一个getters,和vue计算属性computed一样,来实时监听state值的变化,代码如下

const state={   
    showFooter: true,
    changableNum:0
};
//实时监听state值的变化
const getters = {   
    isShow(state) {  
       return state.showFooter
    },
    getChangedNum(){
       return state.changebleNum
    }
};
const store = new Vuex.Store({
    state,
    getters
});
export default store;

定义了state,那怎么改变它呢,在vuex中要说说mutations和actions,actions本身由页面dispatch触发,它可以是异步操作,而mutations则必须为同步操作;在actions异步操作中触发mutations,从而使mutations中的state发生改变。

我们推荐使用dispatch对应的actions,再在actions里commit mutations来改变state,当然如果需求不涉及到异步操作,你也可直接使用commit mutations,从而改变state值。

使用redux进行状态管理

下面我们看看在项目中怎么使用它作状态管理,在此之前先看看redux工作流程图。

                                              

第一步:先在provider上用createStore定义个store,在createStore时需要写好reducer。有人或许会问reducer是什么,它包括状态初始值和state更新操作的对象。

第二步:创建container也就是路由用的组件

const mapStateToProps = (state, ownProps) => {
    let { Common, Login } = state;
    return {
        loading: Common.loading,
        loginInfo: Login.loginInfo
    }
}
const mapDispatchToProps = (dispatch, ownProps) => ({
    actions: bindActionCreators({ initialState, goLogin }, dispatch)
});
export default connect(
    mapStateToProps, mapDispatchToProps
)(Login)

简单的理解就是将state和action关联到login ui组件上去,mapStateToProps 中的state就是我们reducer定义对象。

第三步:分发actions改变状态,如登录UI组件

const {actions, form} = this.props;
actions.goLogin(loginParams, this.props);

第四步:在其他组件中使用刚刚登录的状态信息,还需要在你的组件中导入mapStateToProps,使用props这样你就可以使用刚刚的状态啦

export default connect(mapStateToProps)(Main); 

共享实例数据丢失的问题

无论是使用vuex还是使用redux,当我们刷新页面后,保存在vuex或Redux实例里的数据都会丢失,数据丢失会导致页面出现空白从而降低我们开发效率,这显然不是我们所期待的。分析下产生的原因,其实很简单,因为store里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,store里面的数据就会被重新赋值。

解决思路,因为我们是只有在刷新页面时才会丢失state里的数据,那有没有办法在点击页面刷新时先将state数据保存到sessionStorage,然后才真正刷新页面,beforeunload这个事件在页面刷新时先触发的,我们可以选择放在app.vue入口created中监听此事件

window.addEventListener("beforeunload", () => {})

当页面刷新时,上述代码会监听到刷新事件后,我们将state数据存储到本地,在入口created中还需判断本地数据是否存在store状态,有则获取赋值给state。此外,我们也可以使用第三方持久化插件来解决此问题,像vuex可以使用vuex-persist,上次在使用版本("vuex-persist": "^2.2.0")在打包时出现问题得解决方案记录下,而react可以使用redux-persist

参考文档如下

vue单页面应用刷新网页后vuex的state数据丢失的解决方案_赵天铭的博客-CSDN博客
Vuex Actions - [ Vuex参考手册 ] - 在线原生手册 - php中文网

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: ReactVue是两个流行的前端框架,它们在一些方面有一些区别React整体的思路是函数式的,推崇纯组件、数据不可变和单向数据流。而Vue是基于可变数据的,支持双向绑定。React的组件扩展一般通过高阶组件实现,而Vue使用mixin。React的功能相对较少,很多功能是由社区完成的,而Vue内置了很多功能,使得开发更加方便。例如,React需要使用Redux来管理状态,而Vue内置了Vuex来管理状态。此外,React使用Virtual DOM来提高性能,而Vue不需要使用Immutable来优化性能。关于ReactVue2和Vue3的区别,我没有找到相关的引用内容。但是可以说,Vue3相对于Vue2有一些重要的改进,包括更好的性能、更小的包体积、更好的TypeScript支持等。Vue3还引入了Composition API,使得组件的逻辑更加灵活和可复用。总的来说,ReactVue都是优秀的前端框架,选择哪个取决于个人的偏好和项目需求。 #### 引用[.reference_title] - *1* *2* [Reactvue区别](https://blog.csdn.net/weixin_45785651/article/details/121556598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ReactVue区别](https://blog.csdn.net/PILIpilipala/article/details/118298282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值