这个token是我们在登陆成功后,由服务器端返回的token,我们为了长久保存,放到了另一项技术(放到local storage也可以)
local storage是跟浏览器相关,也跟访问的某个域有关,跟cookie一样,是放在域中的,有一点不如cookie,cookie是浏览器很早就实现的技术(知道要定期清理),token还在发展,存是没有问题的,但是过期清理没有替你做,所以要借用库来做这样的事情,所以要做一些判断,要把过期插件加进去,add plugin,加入后就可以调用方法了,调用方法之后发现可以判断这个数据过期没过期,所以用这些方法可以完成我们需要的功能
jwt和这个过期是两码事
这里的过期是kv对的过期,是100年过期都有可能的
但是这个kv对只保留8小时
要看jwt是否过期还要看secret key
jwt是服务器端验证是否过期,这里是kv对是否过期,这两个值可以不相等但是一般相等
这个组件可以搜过期的插件
过期插件可以导出一大堆函数,
这些函数就是它支持的
Removeexpirekeys是在store里调用的,也就是装了这个插件,把这个插件add进来后,就可以拥有这个方法了
这个方法在这个插件的expire里写
这个js里还定义其他的方法
我们写的例子是,如果要过期功能,store里一定要调用过期插件,加载一下,然后我们就设置时间有效了,10秒,然后下面是每5秒看一下值
第二个5秒打印出来的值就有点问题了
过期之后拿到的值是undefined,判断大于小于0就是false
官方是这么写的,断言这两个比较真还是假
最后再post里把过期插件带上
加进去这个store才可以验证过期时间了,undefined在这里可以用作假来用
其实一个道理,拿到的时候返回这个,所以上面可以不用
所以可以不要,但是要装插件,如果不加这个插件,在当前环境这个store直接去get可能不会做时间判断,所以建议先加上插件,再用store
用这种方式加上时间过期的插件,这样去取一个值,如果取不到就会去判断是否过期,过期就取不到,取不到就被清除掉了
拿到值,如果是空字符串发送过去一点用没有,如果拿不到token值可以立马返回一个值或者
或者触发一个值,触发一个值之后,有一个被观察者,这个被观察者就叫未登录,只要一触发未登录,就立马不能编辑文章了
post里也是,如果发现取不到,立马变成未登录,如果未登录触发一个观察者之后
而且这个被观察者就在pub中被引用了一次,就像这样被引用了一次,如果发现未登录直接跳转到登录页上去就解决了问题
列表页是比较麻烦的
先看官方有没有列表组件
有时候文章回显示一个摘要出来
布局,用最普通就行
列表是比较常用的东西,数据不是很多的情况下,实际上可以不用table,直接用这种方式就可以,用这边的table可以控制表格样式
告诉你使用方法了
下面写列表页,创建个list组件,如果比较多的组件,建议component里才分几个文件夹
从pub那里抄过来
这里如果list就跟我们用的list冲突了,所以改成L
精简下就剩这么多了
list直接return,这样就符合我们的要求了
item’,data,,这里就是遍历每个元素,将信息打印出来,这里就是定义遍历元素,怎么处理元素的函数
data现在就是可以遍历的东西
保存下
在list里加个
还是没办法
说L这边有问题
说L里的render有问题
能有问题的就是它了
在antd,list找它的样式,好像没有
问题在这里,antd版本是2.9但是不到3
2.x版本的list版本是没有的
list是从3.x开始的。有几种办法:
1.把package.json里的antd版本替换掉,然后npm update,之前用yarn安装就yarn upgrade antd@^3.1.5,代表3.x最高的
停止服务,先更新
现在就是最高版本
现在antd文件夹list就有了
给list样式
启动服务
把值拿出来了,也就是遍历其中元素,需要给个容器遍历,能用的容器就是数组和对象,只能用数组
现在想办法把这个数据要想办法处理掉
打开一个列表页,刚才所有的都是点击按钮产生一个事件,这个事件然后才调用的service,才去访问的数据,提交数据或者获取数据。也就是在第一次render的时候就提供数据了,比它还早,想象组件生命周期比它还早,几个几个跟props和state相关,你只能用constructor,给你能用的东西,一般自己能用,自定义函数自定义render,自定义constructor
想在post里拿pub
快捷键有format里的东西
拿数据本来用getall,现在试试list
django里写的getall
这两个暂时用不到
这边映射是什么都不写
这块list也什么都不写
get部分,header也不要
get方法,url+config,config可以不写,不写就点then,返回一个promise对象
用了baseurl,已经满足我们要求了,发起了就是对post的访问
一旦发起请求,什么都不要直接去拿数据即可
getall首先返回的是json对象,这个json对象有两个kv对,posts对应数组,pagination里有4项
这样拿到的response.data里有posts,pagination
被观察对象,posts等于空的
这里是大括号返回,那边就解析成一个对象
这边成功,就会把两个东西提取出来,posts= 【】,pagination,要是这么写,上面的缺省值其实可以不用了
这是一个对象就用这种方式来提取
也要写下被观察对象,page至少1页,size默认值20,pages=1页,count=0有多少条记录,缺省值甚至可以作为缺省值
把缺省值塞到下面,posts没有就是空
这个返回就是这个两项,把这两项解出来,解出来会有缺省值
用缺省值来解决问题,如果里面有对象就不用缺省值了
这里不写,在前面补也可以,没有拿到信息就是空对象,空格数组,这两个东西一经修改,谁观察谁来触发
这就拿回来了
不能写 if data,因为空的也 算真
先测试一下
post.js;里衣服啊错误
现在就是无数据
list里的数据现在改成刚才用的
现在直接拿这个数据还是无数据
因为现在设置的缺省值确实是空
这里list方法一调用就往后台发送请求
点击文章列表
这里就收到请求了
两个数据拿到了,但是有一些问题,di62行
这几个数据都在了
把缺省值去掉看看
还是有问题
用这样的方式测试一下
56行还有问题
先不用item,随便写一个数据
这样就可以了
我们返回的数据是这两个东西
直接到里面拿item的title
这样就都拿到了
原来的捕获到异常到这里来了
这样就已经拿到这些数据了
我需要显示的数据就应该抽象,比render还要早的,只能是constructor
当这个实例构造的时候,就去调用一次service里的list函数,这个list函数就可以去把数据从数据库查回来
就算你已经render过一次了,没关系,这里异步查询完后,还会去修改这个数据
修改这个数据,前面observer就是管这个的,而且也用这个数据,就通知render重画一遍
这个render近年来重画就读取了当前数据,如果当前数据长度超过了长度,就开始遍历一行行显示出来
刚才发起的请求,到后台其实是select * from这张表,没有加任何条件
但是我们在后端写了limit了
这里是用get方法传过来,根本不管post
get方法是这么传过来的
但是这个东西没法走,还是把20行以内的数据发过来了,这个url上的 数据没有往后传
有几种办法,解析这个参数,地址栏也称为location
这个应该跟视图层相关,现在是需要看看list
前端路由肯定有对当前url的处理
之所以能路由,说明匹配到路径了
在router里定义了route规则匹配上了,这里还有匹配到没匹配到
如果被route规则管,一旦匹配调用了你这个可视化组件,就给你props里塞入match
能调用list说明match上了,match上了组件就要注入一个match
打印一下props,看看能解决什么问题
history,location,match都解决了
location就是当前这个
match里告诉我们里面匹配了什么样的东西,url,path
在url后面加一些东西
看下location和match,在原生浏览器对象里,地址栏就叫location,301,302返回location,就是告诉你url该跳哪里,url这个就归location管了,pathname就是url路径匹配上了
后面就是查询字符串
search对应后面问号?后面的东西
这里塞入search,下面就需要进行修改
list用get方法,如何去请求,首先在这里做的事情是,在网站上通过list映射到页面里去,页面里的constructor里面用到了service里面的list方法,这个路径是这么写的
这个search就带到后面去了
传过来之后,主要是下面的路径怎么弄,这就是变化过程
这里django是这么访问的,给这个东西后面加问号?参数
然后把这部分替换掉
剩下的替换掉了发过去
直接这么写就行
还有一个问题,如果对方不按照你的要求来,不写size,直接给你写id=2,可以理解为不管扔多少数据,都到后面去了。
我们django写的时候就判断,首先你是否合法,合法的话就从里面提取page,size,size没有就没有,当20处理,page=1合理就用1。
所以这里可以不使用url处理的方式
url处理有函数
对url所有处理都是塞到里面去了,这里面是props塞进去的,从里面有提取出来match,location,这两样东西都可以提取出来
把这两个东西提取出来你要什么就需要考虑了,把search里面的查询字符串拿到,解析它,得到一个params数据结构。这个数据结构就是kv对,谁等于谁,从里面拿到值向后面发,这是前端解析的方式。
但是这个是实验性的,官方不推荐使用
search直接扔进去相当于拼接在这个后面
拼在后面正好是我们想要的东西
改回来
现在就可以了
改成第一页
显示三行,所以以为不解析也没问题
现在就是如何把这个地方的数值拿到,其实都给我们了,都注入到props了
拿到这些数据就可以呈现出来
还有一些没做,比如链接的问题,详情页