React Hook入门教程

什么是hooks Hooks是React16.8的一个新特性,这让我们在不创建class的情况下,能够使用React的一些常用功能,例如state,生命周期等。在老版本中,如果我们需要使用state,必须要声明一个class 为什么要有Hooks 在有Hooks之前,React有哪些问题? 在多层组件中共享状态逻辑很麻烦,需要通过各种方式进行组件的封装,涉及到某些历史组件时,还有可能需要进行重构 复杂的组件,随着生命周期的各项方法处理,变得更加复杂和难以理解。 class的学习成本高 Hooks的出现解决了这些问题,hook使用在函数内。在Hook的使用环境下,React组件更加趋向于使用函数式组件。Hooks在函数内,不会影响React的大部分功能,但是能够更好的解决以上几个问题。 而且通过函数式方式,减少了学习成本,能够让新手更加快速的上手开发。 React内置Hooks概览 useState useState是React提供的一个Hook。可以在函数式组件中,使用该方法维护一个组件内的局部状态。React在每次渲染该组件时,保存此状态。 和class组件的不同的是,class组件内的state必须是对象,而且调用setState方法是,会将新传入的对象和老的对象进行合并操作。 useState中,可以定义任何类型的局部状态,而且进行状态更新时,也不会将旧状态和新状态进行合并。 useState(0)的返回值是一个长度为2的数组[count,...

5 minute read

Java全栈开发 - 前端技术更新换代之路

我刚开始接触Java的时候主要web端框架是Struts,那时还没有什么前后端分离,还不太流行MVVM框架。 作为一个Java程序员,懂得最多的还是如何用jsp+jquery+easyui来写一个OA系统,需要知道如何一些tomcat的配置,还有对于服务器的一些操作等等。那时的全栈工程师,就是Java+jsp+配置工程师,配置主要是Spring+Struts+ibatis的大量xml配置。套模板,写脚本,复制粘贴easy-ui上的组件代码等。以Java为主的后台系统开发体系中,基本没有专门的前端岗位,都是后端开发全包的这样一个状态。 那时候中小型公司都不会招专门的前端,如果真的需要一些比较复杂美观度要求比较高的页面,可能会将这部分开发工作外包出去,后端程序员再将写好的前端页面复制到项目中改成jsp,其中一些内容替换成jsp标签,在调整一下Javascript交互等等操作,一个项目就可以进入测试上线了。在当时,这就是大多数Java程序员的开发模式。 对于Struts中的一个Action成员变量多如牛毛,引用的地方不计其数,改一处动全身,再加上爆出一些严重的漏洞情况下。SpringMVC开始异军突起,注解式的路径映射,以方法为单位的请求处理,简洁明了的请求定义,开发易上手,易操作,很快的让人开始慢慢抛弃Struts,投入SpringMVC的怀抱。从Struts到SpringMVC的转变中,也只是web层后端框架的选择,开发模式还是和以前一样,前端工程师帮忙做些页面,后端将其转成jsp。然后打成war包,部署到tomcat上,开发流程就完了。 在jsp为主的模板类渲染开发流程下,一个页面请求的渲染如下图: sequenceDiagram 浏览器 ->> Nginx: 发起请求 Nginx ->> Tomcat: 转发请求 Tomcat...

1 minute read

SpringMVC进阶 - 利用HandlerMethodArgumentResolver接口实现自定义参数类型解析

HandlerMethodArgumentResolver 接口 HandlerMethodArgumentResolver 接口看起来很陌生,实际上在SpringMVC中很多地方我们都会直接或者间接的接触到 例如: @RequestParam 解析 RequestParamMethodArgumentResolver (基础类型的默认解析器) @PathVariable 解析 PathVariableMethodArgumentResolver @RequestBody 解析 RequestResponseBodyMethodProcessor...

4 minute read

SpringMVC进阶 - 利用@ControllerAdvice和ResponseBodyAdvice接口统一处理返回值

在我们进行Java的Web应用开发时,如何写更少的代码,做更多的事情。如何让开发更容易上手,更专注于业务层面,不需要太关心底层的实现。这里就分享一些我平时在搭建基础框架时候的一些心得体验。 统一处理返回值 在web应用中,通常前后端会定义一个统一的对象来封装返回值,一般除了业务数据之外,可能会包含一些请求相关的数据 例如以下这个对象 code来标识整个请求的结果 msg用于返回错误信息 data用于返回实际的业务数据。 { "code": 0, "msg": "success", "data": {} }...

5 minute read

写一个代码生成器的心路历程,和一个只需要一天就能完成的代码生成器maven插件源码

为什么要写一个代码生成器 在写后端项目的时候,基础的实现功能都是增删查改,通常以表或者指定的数据模型为单位进行增删查改。 在大部分的Web项目中,通常写一个增删查改需要新建很多个基础类。 假设你的项目是由 控制层、服务层、数据访问层组成,那么如果新增一个表的增删查改功能,我们就也许需要针对这个表创建以下这些类。 Model.java ModelController.java IModelService.java ModelService.java IModelDao.java ModelDao.java 创建完成后,某些项目结构是有通用的基础类,可能还需要根据Model类型来添加泛型,这样又是需要一顿复制粘贴的操作。 interface IModelService extends...

2 minute read

关于博客迁移

旧的服务器已经到期,之前买来是用作练习的,近期也没时间维护,所以就不续期了,把博客迁移到GitHub Pages上来了。 GitHub Pages基于 Jekyll,本博客也是套用了一个 Jekyll的模板。 今后有空,还是会定期更新博客内容,主要是公司最近融了资,工作比较忙。 ~ 愿和大家一起走上巅峰

1 minute read

蹭一波最近的热度,我们是谁? 在线生成

主要就是用一张空白的图,然后使用canvas把用户输入的文字画上去,比较简单。 就这样的界面, 访问地址 https://who.diamondfsd.com PC端 移动端

1 minute read

使用webpack+vue+less开发,使用less-loader,配置全局less变量

Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,在阅读这篇文章的时候,笔者假设你已经有了一定的less编码经验。以下将不会讲解less的用法。 我们在构建一个页面的时候,会定义一些基本参数,例如主色调,文字颜色,标题颜色,副标题颜色,字体大小等等。 通过统一的参数,可以保证页面整体风格的一致性。 在使用Vue模板进行开发的时候,我们把每个页面组件化,组件内的样式就写在组件自身的<style>标签内。 这时候我们需要引用一个变量,通常的方式是专门定义一个公共的variables.less 然后在每个需要使用这些变量的组件内,使用 @import 'xxxpath/variables.less';,主动引用的方式,来引入这些变量。 当组件少的时候还好说,当组件过多的时候,每次都引入就比较烦了。 最近在使用Vux-components这个组件库的时候,该作者提供了一个...

2 minute read