2020/03/18 04-Mobx使用和localstore持久化技术

同步异步理解怎么互相调用,以及调用之后产生什么效果,同步异步都是要结果,只不过异步拿到一个中间结果,但是这个结果要不要随你,目的就是用户名密码提交了,验证完后灯结果到底成功不成功告诉他。
在service里实现了一个login ,在login里做了各种处理。
同步函数就相当于在这里卡着了,这个时候就需要用到异步,现在的主要实现方式是promise,其他异步方案(setinterval,settimeout传参是个问题,所以用promise,因为promise就跟同步效果不一样了,一旦调用promise就立马返回)handleclick函数里就不用等了,什么时候刷新就需要等回调(用了封装类似promise的东西,axios,这个东西回发一个ajax请求,这个请求什么时候回来不知道,我们在里面等then,或者catch等正确还是错误的结果回来,一旦回来相当于成功回调,失败会有失败回调)
成功回调来了做处理,假如结果要在组件中呈现出来,需要刷一下render函数,react提供了两种方法刷新render函数,一种props,一种要么触发state变化,state变化用 setState,控制state变化来引起生命周期中render函数的变化。
这个操作流程还需要传一个object,才能进行setState非常麻烦,效率不高,整个过程就在处理props,和state,都在处理状态值特别麻烦。
因此社区提供了很多处理状态的库,其中最好的是redux(学习难度很大),mobx很小巧,中小型项目非常适合,用起来比较简单,mobox和react结合起来就是强强结合

在这里插入图片描述
在这里插入图片描述
加不加–save都是到运行时依赖的,要操作react,就要安装这两个
在这里插入图片描述
在这里插入图片描述

还有react也安装一下
在这里插入图片描述
看一下package里,mobox和mobox-react都有

在这里插入图片描述
直接把整个目录删除,重新安装下,yarn速度比他快多了,yarn还能解决依赖问题
在这里插入图片描述
在这里插入图片描述
应该保留这些
在这里插入图片描述
这两个直接放在里面

在这里插入图片描述
把源码打包的时候,把这个目录删除,其余打包发给别人即可,别人拿到这个直接npm install即可在这里插入图片描述
我们需要用这个
在这里插入图片描述

在这里插入图片描述
一个叫可观察的,一个叫观察者在这里插入图片描述
实现了开发中的观察者模式
在这里插入图片描述
观察者模式指的是,也叫订阅模式,订阅它,当它发生变化后会通知观察者,发生了变化,会通知在它内部注册好的观察者,这个模式负担小
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在把这种异步调用变成一种mbox,mbox实现的一种通知机制,观察者模式,首先需要告诉他观察什么,然后再解决观察者的问题
在这里插入图片描述
还是在user中,用装饰器observable自动进来,现在这个是一个被观察对象
在这里插入图片描述
一般把观察者放到这里,它是mbox和react直接要通信的东西,因为观察者是react组件,所以用mobx-react,现在就解决了观察者和被观察者的问题,我们组件关心谁就是
在这里插入图片描述
关注这个数据的变化,这个数据变化了,就会在那边收到信息,是一种订阅模式
在这里插入图片描述
这边数据来了然后再变化,这里数据来了都是成功的,成功就是200系列
在这里插入图片描述
发个请求可以回来

在这里插入图片描述
这个data里现在有两个值,token,user

在这里插入图片描述
response里有个data,里面有我们需要的东西,里面有token,user两个变量,这里用下解构
在这里插入图片描述
再发一次,解开了,解构成功

在这里插入图片描述

如何才知道成功了,成功应该引起一些变化,不然 通知干什么,好了通知后要引起重绘,打印看看是否会调用render重绘
在这里插入图片描述
假如现在登录成功,loggedin=true
在这里插入图片描述出错了,不能设置loggedin属性

在这里插入图片描述
说是这里不能设置,this是undefined
在这里插入图片描述
这是新类的定义

在这里插入图片描述
不能用这样的函数
在这里插入图片描述
新类的定义用新办法,改成箭头函数,打印一下this就行,按照道理this里可以加loggedin,出问题是undefined,出问题就要看谁是undefined
在这里插入图片描述
这是新类的定义
在这里插入图片描述
新类的定义用新办法上箭头函数
在这里插入图片描述
新的类,class里多用箭头函数就没错

没看到引起重绘

在这里插入图片描述
**state改变一定会引起重绘,前提是不拦住它,在于这里没有用它。
**
在这里插入图片描述
这个就是service的一个属性
在这里插入图片描述
现在通过service访问看看,然后调用loggedin这样一个属性
在这里插入图片描述
原来是false现在是true

在这里插入图片描述
如果虽然申明成了一个观察者,要去观察被观察对象,但是在render中,至少要用一下,哪怕只是打印一下,也需要用一下,不用根本就不触发,用了就会动态绑定这些东西,然后关联起来,一旦改变就会通知观察者,这边就会有动作
在这里插入图片描述
在这样效率高,连state都不要了,这样就是说关注谁,谁就可以变。
它的意思是大家 都可以是观察者,你可能观察整个,它观察其他的,只要观察的变量发生变化,这边就可以引起动作

在这里插入图片描述
这边都是观察者,就要看你观察谁,谁变了,你就有影响,虽然叫观察者,但是不观察它,变了也不会通知你
在这里插入图片描述
失败也需要通知,失败就为false
在这里插入图片描述
这一句不会改变dom
在这里插入图片描述

学react之后在学vue,问题不大,写法都差不多,用的都是新语法

现在看到true这个值了,现在想要让它跳转
在这里插入图片描述
在这里插入图片描述
跳另外一个地址就是路由的问题,就是前端路由的事情,这边就告诉你怎么跳转redirects,重定向
在这里插入图片描述
跳使用redirect

在这里插入图片描述
简单点,抄这一句话即可

在这里插入图片描述
这一句就类似

在这里插入图片描述
两条return,假设登录成功状态就记住了
在这里插入图片描述假设登录成功状态就记住了,loggedin就是true,直接return这样一个顶级标签
在这里插入图片描述
是false就把下面的return回去,如果没有登录就显示登录组件
在这里插入图片描述
是在路由里的,跟操作DOM树有关,返回还是在JSX语法里,根操作dom树有关
在这里插入图片描述

现在没有登录后的页面,就先跳转到首页上
在这里插入图片描述
点击登录

在这里插入图片描述
**再次点击登录就没用了,实现了登录了以后就不用再登录了,用mbox来写,是比较简单的(虽然用promise的setState方式也可以模拟出来,甚至可以写ajax调用回调也是异步的,但是这种操作都是比较麻烦的,社区就提供了redux和mobx两种控件。
两种组件用哪个都行,redux太难了,mbox就比较简单 **
在这里插入图片描述
这里有一个小问题,token给扔回来了,cookie是一种持久化的方案,用cookie持久化的数据,下回在请求的时候会随着请求带回去cookie,只要cookie不过期,它都在,只要访问这个域名的话,就会把这个cookie带上发到服务端去,其中还有浏览器没有的cookie值,sessionid,这个cookie值是sessionid,都是带回到服务器端去的。
放在cookie没问题,但是我们要自己弄一个header

另一种持久化策略,在浏览器端可以保存数据可以用cookie,但是绝对不用header,header请求完了就没了,cookie只要不过期可以长久保存,不推荐写永久cookie,cookie还是要设计一个合理的过期时间的。
在这里插入图片描述
html5之后提供了很多持久化方案,这里有一个application
在这里插入图片描述
这里有几种持久化方案,每个浏览器支持的都不一样
在这里插入图片描述
有人写好了,会调用浏览器最好的持久化方案帮我们存储下这些数据

内容其实已经有了,已经保存下来
在这里插入图片描述
有些情况是,已经写成功了,但是死活刷新看不到,把浏览器关掉再打开到loacal storage里看,可能就有了在这里插入图片描述
常见的持久化方案就是cookie,这就是本地化存储的方案,浏览器端持久化也是为了浏览器方便,也带来了风险,如果不用Jwt这种技术,谁想改都没辙
在这里插入图片描述
如何使用,cookie就塞进去就好了,在服务器 django里request.cookie就可以拿到了在这里插入图片描述
新的持久化方案到底怎么利用,首先看一个库,跨浏览器本地化的解决方案
在这里插入图片描述
安装
在这里插入图片描述
建议直接yarn,会有依赖问题

在这里插入图片描述
可能有错误,还是直接yarn装一个
在这里插入图片描述yarn安装直接启动,yarn add store
在这里插入图片描述
在这里插入图片描述
安装依赖里,store已经在里面了

在这里插入图片描述
官方说就这么用

在这里插入图片描述

这就是common js的方式,引用之后给一个名字,用这个名字.get即可,因为这种情况下,直接按F8,import语句都通过不了,所以用commonjs的方式,user设定值,get出来这个值
在这里插入图片描述
get回来返回一个对象,直接按F8
在这里插入图片描述
有一个问题,跟cookie一样是否需要过期
在这里插入图片描述
安装的store里有这样一个插件
在这里插入图片描述
点击例子

在这里插入图片描述
set这么玩,这一条就告诉我们一条数据可以坚持多久
在这里插入图片描述
这样就可以得到一个值,把一些值带进去,设定10秒过期时间
在这里插入图片描述
setInterval异步函数每一秒执行一次,取一下user值
在这里插入图片描述
在这里插入图片描述
少了个东西没写,要加这个插件,不加不支持过期,写了也是白写
在这里插入图片描述

在这里插入图片描述
get可以加默认值,F9停一下,settimeout,setinterval,测试的时候用的很多
在这里插入图片描述
拿到user里,导入下插件
在这里插入图片描述
设定下过期时间,这个单位是毫秒
在这里插入图片描述
设定token值,token的值之前已经解构出来了
在这里插入图片描述
把cookie和这里存储的都删除掉

在这里插入图片描述
写这个可能后面就看不到了

在这里插入图片描述
用一次chrome浏览器
在这里插入图片描述
cookie里还有一些其他信息,csrftoken,是以前保留的
在这里插入图片描述
点击登录

在这里插入图片描述
token写进去了
在这里插入图片描述
用这种方式就解决存储问题,下一次想要免登陆,我们可以到local storage。,提取token值,提取不到自然不能帮你登录了。提取到token值就发过去,服务端解开验证看看token过期没,然后django还要验证用户是否被禁用,才能登录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
store.js是兼容所有浏览器的localstorage包装器,会自动选择local storage,globalstorage或者userdata来实现本地存储功能
在这里插入图片描述
用yarn就不用npm,两个会有一点兼容性问题,依赖解决方案不一样

在这里插入图片描述

remove再去访问就是undefined
get后面加个缺省值

在这里插入图片描述
拿到getuser就是一个对象

在这里插入图片描述
for each非常特殊,存储的这个两个值是反的,key在前,value在后面
在这里插入图片描述
插件需要加上

在这里插入图片描述
service代码把这段加上,推荐res这块用解构
在这里插入图片描述
再定义一个,使用each,callback给了两个值
在这里插入图片描述
这两个值使用的时候有两种方式
在这里插入图片描述
现在把value放前面去了,key在后头

在这里插入图片描述
所以这里换下位置,…args就收集到一个数组中,下面可以对这个数组里的数据进行遍历
在这里插入图片描述
现在就正过来了
在这里插入图片描述
store一个是加插件,过期的问题,还有一个就是用遍历的问题,大部分情况做字典问题,kv是反过来的,这是js这块的状态改变

mobx用的东西不多,实际上就是观察谁,被观察对象只要发生改变,观察者这边只要是引用到了,就会触发render函数的重绘,这时候会在render函数里做一些改变
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述拿到这个值就想办法跳转,redirect来解决问题
在这里插入图片描述
缺失了补上即可
在这里插入图片描述
login整个写好的代码

在这里插入图片描述
在这里利用这个进行了修改,异步的回调才修改
在这里插入图片描述
在loggin组件里要写上
在这里插入图片描述
把service注入进来,变成observer
在这里插入图片描述在里面继续写判断,如果是真就跳转,如果是假就返回登录界面

在这里插入图片描述
这样就完成了功能,这样前后端就打通了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值