初识React之新旧生命周期
一、React旧生命周期
初始化阶段:由ReactDoM.render()触发—初次渲染
constructor
componentWillMount()
render()
componentDidMount() =====>常用
一般在这个钩子中做一些初始化的事,例如:开启定时器、发送网络请求、订阅消息
更新阶段:由组件内部this.setsate()或父组什render触发
shouldComponentUpdate()
componentWillUpdate()
render()
componentDidUpdate()
卸载组件:由ReactDoM.unmountcomponentAtNode()触发
componentWillUnmount()====> 常用
一般在这个钩子中做-些收尾的事,例如:关闭定时器、取消订阅消息
二、React新生命周期
初始化阶段:由ReactDoM.render()触发—初次渲染
constructor()
getDefivedStateFromProps
render()
componentDidMou ...
初识React之jsx核心语法
最近技术栈要更改为React啦,这一篇算是第一篇,一个新的开始!
定义虚拟DOM,不要写引号标签中混入JS表达式要用{}
表达式: 一个表达式产生一个值,可以放在任何一个需要值得地方
12345(1) a(2) a + b(3) demo(1)(4) arr.map()(5) function test() {}
语句(代码)
123(1) if() {}(2) for() {}(3) switch() {case}
样式的类名指定不要用class,要用className内联样式, 要用style=双括号key:value的形式去写虚拟DOM必须只有一个根标签标签必须闭合标签首字母
若小写字母开头,则将改标签为html中同名元素。若html中无该标签对应的同名元素,则报错。
若大写字母开头,react就去渲染对应的组件。若组件没有定义,则报错。
Nginx location、proxy_pass 后有 / 与没 / 的区别
分4种情况讨论:
请求的网站为:192.168.1.1:80/static/a.html
整体配置文件如下:
1234567891011121314151617181920server { port 80, server name 192.168.1.1 location /static { proxy_pass 192.168.2.1:81 } location /static { proxy_pass 192.168.2.1:81/ } location /static/ { proxy_pass 192.168.2.1:81 } location /static/ { proxy_pass 192.168.2.1:81/ }}
第一种:location后无/,转发网站无/12345678# 192.168.1.1 -> server name# :80 ---------> port# /statc -- ...
JavaScript之用Promise实现限制异步操作并发
使用Promise实现:限制异步操作的并发个数,并尽可能快的完成全部
题目有8个图片资源的url,已经存储在数组urls中。
urls类似于[‘https://image1.png', ‘https://image2.png', ….]
而且已经有一个函数function loadImg,输入一个url链接,返回一个Promise,该Promise在图片下载完成的时候resolve,下载失败则reject。
但有一个要求,任何时刻同时下载的链接数量不可以超过3个。
请写一段代码实现这个需求,要求尽可能快速地将所有图片下载完成。
12345678910111213141516171819202122232425var urls = [ "https://byr.vercel.app/static/img/page14/1.jpg", "https://byr.vercel.app/static/img/page14/1.jpg", "https://byr.vercel.app/static/img/pag ...
好想要一只冰墩墩
相信大家最近都在为怎么买到一只顶流明星冰墩墩而发愁
既然买不到,那就自己动手画一个吧,过程很简单
Python绘画Turtle库Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。
代码详解1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411 ...
初识Django之验证码Pillow
为了防止机器人频繁登录网站或者破坏分子恶意登录,很多用户登录和注册系统都提供了图形验证码功能。
在Django中实现图片验证码功能非常简单,有现成的第三方库可以使用,我们不必自己开发,比如其中一个库Pillow。
安装Pillow执行命令pip install pillow
Pillow
Image画布主要负责尺寸,颜色,模式
ImageDraw画笔属于哪个画布,主要负责文字,点,线,弧
ImageFont字体画布的辅助工具,负责字体和样式
绘制流程
background = (10, 20, 30) RGB颜色
初始化画布image = Image.new(‘RGB’, (100, 50), background)
获取画布中画笔对象
draw = ImageDraw.Draw(image)
绘制验证码,随机四个
font = ImageFont.truetype(‘path’, size)
Fontcolor = (20, 40, 60)
Draw.text((x, y), ‘R’, font, fontcolor)
内存流
内存流BytesIO()
将图片存 ...
2022开年行大运
2022 新的一年,好运连连。
虽然才过了一个月,已经是不可阻挡了,感觉2022年真的会是幸运爆棚的一年!!!✌️
疫苗在上海打第三针获取的参与奖品
电动牙刷哒哒老师昨晚送的礼物(昨天中午还提到说从没用过想买个体验一番)
年会中奖参加年会没抱希望最后关头中了一等奖
买到了回家的火车票庆幸可以回去,好多同事留在上海回不去了= =
总的来说,一月份是一个好多开端,希望整年都可以顺顺利利!!
冲鸭🌈
初识Django之分页器Paginator
为什么要分页分页功能是几乎所有的网站上都需要提供的功能,当你要展示的条目比较多时,必须进行分页,不但能减小数据库读取数据压力,也有利于用户浏览。
原生方法分页
在urls.py里urlpatterns中添加path('getstudents/', views.get_students, name='get_students'),
views.py中添加get_students函数获取学生数量12345678def get_students(request): page = int(request.GET.get("page", 1)) per_page = int(request.GET.get("per_page", 10)) students = Student.objects.all()[per_page*(page-1): page*per_page] data = { "students": students } return render ...
JavaScript之Function替代eval
起因对于数组传入到数据库中,会以字符串的形式返回,那样前端组件在利用值的时候会匹配不上,需要将其转回数组。
例如: let a = "['a', b, c, 1, 2]"
转换: eval('(' + a + ')') 则可将a转换成数组
eval到底做了什么?
evaleval() 函数会将传入的字符串当做 JavaScript 代码进行执行。
返回字符串中代码的返回值。如果返回值为空,则返回 undefined。
永远不要使用 eval!eval() 是一个危险的函数, 它使用与调用者相同的权限执行代码。如果你用 eval() 运行的字符串代码被恶意方(不怀好意的人)修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到某一个 eval() 被调用时的作用域,这也有可能导致一些不同方式的攻击。
eval替代方法
使用eval的糟糕代码:
123456function looseJsonParse(obj){ return eval("( ...
初识Django之中间件Middle
什么是Django中间件中间件是 Django 请求/响应处理的钩子框架。它是一个轻量级的、低级的“插件”系统,用于全局改变 Django 的输入或输出。每个中间件组件负责做一些特定的功能。
自定义一个Django中间件12345678910111213141516171819202122232425262728293031323334353637from django.utils.deprecation import MiddlewareMixinfrom django.http import HttpResponsefrom django.core.cache import cacheimport timeimport randomclass HelloMiddle(MiddlewareMixin): def process_request(self, request): print(request.META.get("REMOTE_ADDR")) ip = request.META.get("REMOTE_ADDR") ...