react

2020年,我们该如何学习 WEB 前端开发

。_饼干妹妹 提交于 2020-08-06 04:49:20
作者|小问 编辑|橙子君 出品|阿里巴巴新零售淘系技术 我们可以把学习路线比作游戏中的段位上分,在不同的分段都有自己的定位和要锻炼的事情: 青铜—从零开始小学生: 怀着满腔的热血,看到了这一个行业的希望和未来,准备开始学习 Web 开发知识。 先通过 w3cschool 等免费学习资源把 HTML、CSS 和 JavaScript 的基本操作学会了 写一个简单的表白页面送给你的女/男朋友,展示一下自己努力的成果,如果没有就当我没说 白银 —懵懵懂懂初学者: 懂得如何使用 HTML、CSS 和 JavaScript 三大件来实现基本页面开发功能 选择一个可以覆盖多种场景、可以随自己意愿调整难度的项目尝试实现,如博客系统、记账本、Markdown 编辑器等 从 React 和 Vue 这两个框架中选择一个进行学习 黄金—轻车熟路新玩家 :懂得使用框架来实现上面 来源: oschina 链接: https://my.oschina.net/u/4350719/blog/4322386

关于reduce,我想说...

纵然是瞬间 提交于 2020-08-05 21:19:34
前言 reduce,这个高级函数,大家最开始应该是用于求和。我也是,仅仅在求和中遇到它。后来数组越来越复杂,想查找简单解决办法的时候发现了这个大杀器的更多使用。现在,它成为了我最爱的高阶函数,没有之一。reduce参数说明我就不多介绍了,下面主要是一些实战小技巧。 [ 1 , 2 , 3 ].reduce( ( c,n )=> c+n); 复制代码 替代部分其他数组高阶函数 reduce替代map const arr = [{ name : 'Amy' },{ name : 'Bob' }]; arr.map( it => it.name); // map arr.reduce( ( c,n )=> [...c,n.name],[]); // reduce 复制代码 reduce替代filter const arr = [{ name : 'Amy' , age : 18 },{ name : 'Bob' , age : 20 }]; arr.filter( it => it.age> 18 ); // filter arr.reduce( ( c,n )=> n.age> 18 ? [...c,n]:c,[]); // reduce 复制代码 reduce替代 map + filter。 const arr = [{ name : 'Amy' , age : 18 },{

react 下载excel文件

[亡魂溺海] 提交于 2020-08-05 20:45:47
后台返回的是 ResponseEntity< byte []> 格式 1、需要加参数,header的,如下,如果不需要这些,可去掉 export const getFileExport = async (url) => { const headers = await getHeaders () ; return await axios . get (url , { //downloadFiles 接口请求地址 params : { user : sessionStorage . getItem ( TOKEN_SESSION_CONFIG . USER )} , headers : headers , responseType : 'blob' }). then ((rs) => { const blob = new Blob ([rs. data ] , { type : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }) const fileName = " 用户导入模板 .xlsx" ; if ( 'download' in document . createElement ( 'a' )) { // 非 IE 下载 const elink = document .

vue3 reactive 对比 react useState 以及 ramda 和 lodash 的取舍问题

ⅰ亾dé卋堺 提交于 2020-08-05 20:25:38
vue3 的 reactive 和 react的useState有着根本上的不同 const { ref, reactive, watch } = require("vue"); let s1 = reactive({ x: 0 }); let s2 = reactive({ x: 0 }); let s3 = s2; watch([s1], (newS1) => { console.log("watch s1", newS1); }); watch([s2], (newS2) => { console.log("watch s2", newS2); }); watch([s3], (newS3) => { console.log("watch s3", newS3); }); setTimeout(() => { s1.x = 2; s2 = { x: 111, }; s3.x = 444; }, 1000); 上述代码的输出如下, s1的watch生效了, 而s3的修改触发了两次watch 单独设置s2并不会出现任何输出 setTimeout(() => { s2 = { x: 111, }; }, 1000); 对比react 采用的比较方式是===比较, 所以在原对象上的修改会被忽视, 而ramda每次总是返回新对象的特点正好契合react的方式 import React,

我是小白0基础,现在我想学习前端开发,该如何系统的学习?

痞子三分冷 提交于 2020-08-05 19:45:23
以下纯属个人观点和建议,肯定是有局限性的,但是也希望能给你带来一些帮助。 我们俨然能感受到前端岗位现在已经发展成了最重要的研发岗位之一,所以多我们提出的要求也就越来越高了。所以我们需要的也就不仅仅只是掌握css、html、JavaScript了,但是这三大件一直都是前端的根本,这一点从未改变,而这三大件中JavaScript又是重中之重、 接下来我会结合我的一点经验,给出前端系统学习路线的一些具体建议以及入门前端时的一些困境。 入门前端时的一些困境 1、因一些基础算法、数据结构理论不扎实导致一些编程思维难于理解。比如 原型链,如果清楚 数据结构中链表结构,那么这个东西不难理解,再比如 哈希值,懂得数据结构中哈希表,哈希值也就迎刃而解。 2、计算机体系结构、操作系统理论、网络理论不扎实导致到后期一些东西难于理解。比如有同学从前端学习入手,后来学习node开发 ,在 I/O ,进程、线程、IPC 、线程锁方面有些概念就比较难于理解,而导致不能很好得使用node 的api 。 3、前端整体体系架构没有做过深入思考。 导致用会用,但不知道为什么用,用另外一个有什么区别。 4、学习环境中无高手。 没有高手能够指导自己进入下一个层次。 5、有意识但是没有行动我的网盘收集了一堆资料或者一堆视频,然后就没有然后了 。 目前企业招聘前端工程师的基本需求: 1.精通DIV

Taro 3 正式版发布:开放式跨端跨框架解决方案

此生再无相见时 提交于 2020-08-05 19:06:17
作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验。今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Taro 未来的更多两年能像一名共产主义战士一样经受住更多的考验。以下是 Taro 3 的一些新增特性: 跨框架:React、Nerv、Vue 2、Vue 3、jQuery 在旧版本的 Taro,我们以微信小程序的开发规范为基准,使用 React/JSX 的方式来进行开发。而在 Taro 3,我们把这一思路量化为一个编程模型: 设微信小程序生命周期为一个 interface ,不同的框架实例的生命周期虽然不尽相同,但我们可以根据框架生命周期分别新建一个 class 去 implements 小程序生命周期的 interface 。相应地,小程序的组件/API/路由规范可以使用同样的思路和模型让不同框架的代码,运行在不同的端上: 在 Taro 3 中我们内置了 React、Nerv、Vue 2、Vue 3 四种框架的支持,开发者可以通过 taro init 命令创建对应的模板,并编写与框架本身生命周期、调用方法合乎一致的代码(idiomatic code),在语法上也没有任何的限制。 在四类框架之外,Taro 3 还提供 jQuery-like API 的支持

区分http请求状态码来理解缓存(协商缓存和强制缓存)

瘦欲@ 提交于 2020-08-05 18:35:44
什么是http缓存呢,当我们使用chrome浏览器,按F12打开控制台,在网络请求中有时候看到状态码是200,有时候状态码是304,当我们去看这种请求的时候,我们会发现状态码为304的状态结果是:Status Code: 304 Not Modified,而状态码为200的时候一般会有四种情况,一种是直接返回200,没有任何其他的标志,另一种是Status Code: 200 OK (from memory cache),还有一种是Status Code: 200 (from disk cache)。最后一种不是太常见,Status Code: 200 (from Service Worker).后面这三种状态码看到的效果是灰色的,其实从给出的信息也能看出来是从缓存中获取上数据。下面我们来详细介绍一下他们都分别是什么时候出现的。 其实我们可以按状态码来区分其为两大类,分别是协商缓存--304和强制缓存--200 协商缓存(304) 这种方式使用到了headers请求头里的两个字段,Last-Modified & If-Modified-Since 。服务器通过响应头Last-Modified告知浏览器,资源最后被修改的时间: Last-Modified: Thu, 20 Jun 2019 15:58:05 GMT 当再次请求该资源时,浏览器需要再次向服务器确认,资源是否过期

react 拖拽和换色

大兔子大兔子 提交于 2020-08-05 16:54:56
可以使用按钮控制移动, 也可以拖拽移动 可以使用按钮改变颜色 import React, { createRef, useState, useEffect, } from "react"; import "./App.css"; function App() { const box = createRef<HTMLDivElement>(); // x 横向, y 纵向 const [position, setPosition] = useState({ x: 0, y: 0, }); useEffect( () => { console.log("update", box.current!.getBoundingClientRect()); }, [] // 空数组表示该函数只执行一次 ); const move = (dx = 0, dy = 0) => { console.log("move", dx, dy, box.current?.getBoundingClientRect()); moveTo(position.x + dx, position.y + dy); }; const moveTo = (x = 0, y = 0) => { console.log("moveTo", x, y); setPosition({ x, y, }); }; const

实现 React Hooks

我们两清 提交于 2020-08-05 16:08:01
实现 React Hooks UI 开发有两个问题: 展示复用 逻辑复用 展示复用目前基本使用组件化来解决,逻辑复用一直以来都没有特别好的解决方案。React 从一开始的 mixin ,到 高阶组件 以及 Render Props ,都是在试图解决这个问题,但是都引入了一些别的问题。 Mixins 命名空间冲突 数据来源不清晰 Higher-order Components props 属性来源不清晰 props 上命名冲突 额外的组件渲染带来性能问题 Render Props(Vue 中的 Renderless Components) 解决了 命名空间冲突、数据来源不清晰的问题,仍然会带来额外组件实例的性能消耗 Hooks 在前段时间 Hooks 发布后,我认为 React 找到了【有状态】组件【函数式】【复用逻辑】的解决方案。 先说有状态:一般来说,无状态组件直接使用函数组件就行,省去了实例化的样板代码和性能消耗。不涉及到 state 的存取,可以直接写个 helper 函数处理一下,方便又快捷。 再说函数式:class 组件是面向对象的,每一次声明、声明周期都逃不开 this,而 hooks 更加函数式,调用一个函数,传入的是初始值,返回修改值,没有副作用。 最后说复用逻辑:DRY,一般来说,相同的代码不写第二次,在 class 组件中,通过生命周期方法对 state 修改

React中的这三个点是做什么的?

元气小坏坏 提交于 2020-08-05 15:50:45
问题: ... 在此React(使用JSX)代码中做什么?它叫什么? <Modal {...this.props} title='Modal heading' animation={false}> 解决方案: 参考一: https://stackoom.com/question/26HFZ/React中的这三个点是做什么的 参考二: https://oldbug.net/q/26HFZ/What-do-these-three-dots-in-React-do 来源: oschina 链接: https://my.oschina.net/u/3797416/blog/4329599