reactive

手拉手带你开启Vue3世界的鬼斧神工

放肆的年华 提交于 2020-05-01 17:20:43
前言 2020注定是不平凡的一年,无论是疫情的横空出世,还是世界局势的激烈动荡,抑或是股市的跌宕起伏,我相信很多国人都会有一种庆幸我是中国人的深刻感悟。作为一名技术宅,除了疫情,更多的还是雨女无瓜,随着 Vue3.0 Beta 的推出,大家都争先恐后的尝了鲜,笔者也不例外,经过一番研究,觉得 Vue3 也的确存在它独特的魅力,也应该写一篇博客方便还没有体验的朋友能够快速对其有一个大体的认知。 开始 此文默认你已熟悉 Vue2.x 相关知识 环境搭建 相关库版本 Vue-Cli 4.x Vue 3.0.0-beta.1 Vue-Router 4.0.0-alpha.7 具体步骤如下: 使用 VueCli 创建一个 Vue 基础项目: vue create project 在项目中,执行升级命令: vue add vue-next 项目目录结构如下: 进行完以上操作无误之后基本环境就已经搭建完毕。 配置路由 项目中执行 npm install vue-router@4.0.0-alpha.7 -S 按照一般规范,在 src 目录下新建 router 文件夹,并在 router 文件夹中新建 index.js 文件。 index.js内容: import { createRouter, createWebHashHistory } from 'vue-router' ; import

Spring Webflux 入门

做~自己de王妃 提交于 2020-04-27 20:50:40
Spring-webflux Spring 5.0 Spring-webflux 是一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务。 springboot2.0发布不久,最近研究了一下springboot2.0的新特性,其中就发现了webflux。 下面是spring-flux的一个demo话不多少上代码 使用webflux和MVC的区别就是在artifacId后面加上flux <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "hello

Vue 3.0 Composition API

我们两清 提交于 2020-04-27 15:01:17
Composition API 发布转载请附原文链接 https://www.cnblogs.com/zgh-blog/articles/composition_api.html 这两天初步了解了下 vue 3.0 相关的一些内容,对于 Composition API 的指导文档过了一遍 (当然根据经验,有些重要的地方可能需要在实践过程中反复思考)。依据自己的理解,对 Composition API 做了一下中文的说明,这里放一下,方便大家在学习的时候能更直接的阅读和理解。如果有误或者有更好的理解,欢迎指出评论~ 一套新增的, 基于函数的 api 让组件逻辑更加灵活。 原因,动机 逻辑复用和代码组织 过去使用 vue 的原因是快速,简单的构建中小型项目。随着 vue 使用者的发展,被用来构建大型项目,这会使团队对项目进行迭代需要耗费更长的时间。过去的时间我们见证了这些项目被 vue 当前的 api 的编程模型所限制,大概有两类问题: 复杂组件在不断扩展中,变得难以理解。特别在我们读别人写的代码时,根本原因是 现有 API 强制按 options 组织代码,没有逻辑关系,实际上,按逻辑关系组织代码更有意义。 缺少一个干净,无成本的机制,在多个组件之间提取和重用逻辑。 新增 API 的目的是提供更灵活的组件组织代码方式。现在不使用 options,而是使用 function 组织代码

Spring Boot WebFlux 快速入门实践

天大地大妈咪最大 提交于 2020-04-23 15:33:35
Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT 复制代码 Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从搭建到开发的过程。应用开箱即用,只要通过一个指令,包括命令行 java -jar 、 SpringApplication 应用启动类 、 Spring Boot Maven 插件等,就可以启动应用了。另外,Spring Boot 强调只需要很少的配置文件,所以在开发生产级 Spring 应用中,让开发变得更加高效和简易。目前,Spring Boot 版本是 2.x 版本。Spring Boot 包括 WebFlux。 Spring Boot 2.0 WebFlux 了解 WebFlux ,首先了解下什么是 Reactive Streams。Reactive Streams 是 JVM 中面向流的库标准和规范: 处理可能无限数量的元素 按顺序处理 组件之间异步传递 强制性非阻塞背压(Backpressure) Backpressure(背压) 背压是一种常用策略,使得发布者拥有无限制的缓冲区存储元素,用于确保发布者发布元素太快时,不会去压制订阅者。 Reactive Streams(响应式流) 一般由以下组成: 发布者:发布元素到订阅者 订阅者

SpringBoot是如何启动的?这篇文章告诉你答案!

时光毁灭记忆、已成空白 提交于 2020-04-18 07:40:45
本文是通过查看SpringBoot源码整理出来的SpringBoot大致启动流程,整体大方向是以简单为出发点,不说太多复杂的东西,内部实现细节本文不深扣因为每个人的思路、理解都不一样,我个人看的理解跟大家看的肯定不一样,到时候表达的出来的云里雾里也没啥用。 首先我将SpringBoot的启动流程整理成以下阶段: SpringApplicaiton初始化 审查ApplicationContext类型 加载ApplicationContextInitializer 加载ApplicationListener Environment初始化 解析命令行参数 创建Environment 配置Environment 配置SpringApplication ApplicationContext初始化 创建ApplicationContext 设置ApplicationContext 刷新ApplicationContext 运行程序入口 省去了一些不影响主流程的细节,在查看SpringBoot源码之前,不得不提一下 spring.factories 这个文件的使用和功能。 关于spring.factories spring.factories 是一个properties文件,它位于 classpath:/META-INF/ 目录里面,每个jar包都可以有 spring.factories 的文件

SpringBoot启动流程分析(一):SpringApplication类初始化过程

孤者浪人 提交于 2020-04-18 06:53:07
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇:    Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一):SpringApplication类初始化过程 SpringBoot启动流程分析(二):SpringApplication的run方法 SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法 SpringBoot启动流程分析(四):IoC容器的初始化过程 SpringBoot启动流程分析(五):SpringBoot自动装配原理实现 SpringBoot启动流程分析(六):IoC容器依赖注入 笔者注释版Spring Framework与SpringBoot源码git传送门:请不要吝啬小星星 spring-framework-5.0.8.RELEASE SpringBoot-2.0.4.RELEASE 一、SpringApplication初始化过程   1.1、SpringBoot项目的mian函数   常规的这个主类如下图所示,我们一般会这样去写。   在这个类中需要关注的是 @SpringBootApplication SpringApplication.run()   关于

VueJs not working on first click or first event

送分小仙女□ 提交于 2020-04-17 21:47:33
问题 I was able to create this dynamic elements. My purpose in this is to create dynamic divs that will be based on "count", and inside that div, I can add multiple textboxes. Here's what I came up with You'll notice that the first click, it will not be the expected result. But when you click it the 2nd time, it will work. I should be missing something. But I don't know what it is as I'm new to vue. Here's the code as well: <div id="app"> <button @click="populate">Populate</button> <div v-for="

【翻译】Spring 5 WebFlux入门

杀马特。学长 韩版系。学妹 提交于 2020-04-17 10:16:29
【推荐阅读】微服务还能火多久?>>> 原文链接: Guide to Spring 5 WebFlux | Baeldung 1. 概览 Spring WebFlux 框架是 Spring 5的一部分,他为 web 应用提供了响应式编程的支持。 在本文中,我们将使用响应式注解*RestController*和*WebClient*创建一个小的 REST 应用, 我们还将研究如何使用Spring Security保护我们的响应式端点。 2. Spring WebFlux 框架 ** Spring WebFlux内部使用Project Reactor及其发布者实现 - Flux和Mono。** 这个新框架支持下面两种编程模型: - 基于注释的响应式组件 - 函数级别的路由和处理 在这里,我们将重点关注基于注释的响应式组件,正如我们已经研究过的[functional style – routing and handling]( Introduction to the Functional Web Framework in Spring 5 | Baeldung ). 3. 依赖 让我们从spring-boot-starter-webflux依赖开始,它包含了所有其他必需的依赖: 用于基本Spring Boot应用程序设置的spring-boot和spring-boot-starter

聊聊reactive streams的Mono及Flux

[亡魂溺海] 提交于 2020-03-27 10:58:10
3 月,跳不动了?>>> 序 本文主要讲一下reactive streams的Publisher接口的两个抽象类Mono与Flux Publisher reactive-streams-1.0.1-sources.jar!/org/reactivestreams/Publisher.java /** * A {@link Publisher} is a provider of a potentially unbounded number of sequenced elements, publishing them according to * the demand received from its {@link Subscriber}(s). * <p> * A {@link Publisher} can serve multiple {@link Subscriber}s subscribed {@link #subscribe(Subscriber)} dynamically * at various points in time. * * @param <T> the type of element signaled. */ public interface Publisher<T> { /** * Request {@link Publisher} to start

长列表性能优化

戏子无情 提交于 2020-03-20 13:21:13
3 月,跳不动了?>>> vue 会通过 object.defineProperty 对数据进行劫持,来实现视图响应数据的变化,然而有些时候我们的组件就是纯粹的数据展示,不会有任何改变,我们就不需要 vue 来劫持我们的数据,在大量数据展示的情况下,这能够很明显的减少组件初始化的时间。 所以,我们可以通过 object.freeze 方法来冻结一个对象,这个对象一旦被冻结,vue就不会对数据进行劫持了。 export default { data: () => ({ list: [] }), async created() { const list = await axios.get('xxxx') this.list = Object.freeze(list) }, methods: { // 此处做的操作都不能改变list的值 } } 这里只是冻结了 list 的值,引用不会被冻结,当我们需要 reactive 数据的时候,我们可以重新给 list 赋值。 来源: oschina 链接: https://my.oschina.net/u/560237/blog/3207126