react

实现虚拟DOM

限于喜欢 提交于 2020-08-04 12:05:53
一:完整代码 ;( function (w){ function createElement(type, attribute, ...childs){ // 创建虚拟DOM let element = { type: '' , attribute: {}, childs: [] }; element.type = type; element.attribute = attribute; for (let item of childs){ element.childs.push(item); } return element; } function render(vElement, domNode){ // 把虚拟DOM渲染到真实DOM节点 let elementList = [], // 保存着一些元素数组,这些元素数组的第一项是父元素,其他项是子元素 listItem = [], // 迭代中临时保存elementList的每一项 topE = [vElement], // 保存着上一层元素列表 tempE = [], // topE的临时变量 elementRef = [], // 保存元素引用,不保存文本节点的引用 elementRefs = []; // 另一个,交替使用 while (topE.length != 0){ // 生成符合符合要求的elementList数组

微前端调研及简析SPA实现原理

送分小仙女□ 提交于 2020-07-29 11:31:56
最近对微前端讨论很多,梳理下自己对微前端的理解以及业内的一些微前端尝试反馈。 第零部分:自己对微前端理解 第一部分:基于Single-SPA微前端的一些demo 第二部分:Single-SPA微前端实现原理简析 第三部分:微前端业内一些总结 第零部分:自己对微前端理解 在判断自己项目是否需要使用微前端前,只要记住一句话即可:杀鸡焉用牛刀。 如果项目很简单,请不要没有困难创造困难; 如果项目太大,受够了iframe的种种掣肘,同时你还有一帮陪你肝新玩法的同事,能够准备好面对意想不到的快乐和意想不到的痛苦,深吸一口气,来,我们搞起。 在内部的两次讨论,能够看到不少优点,但同时也需要开发者有一个规范约束,才能发挥微前端的能力。有几个点需要注意: 状态隔离与否 - 状态共享需要规范 样式隔离 - 需要规范 注册应用 - 需要规范 三方依赖不统一 向下兼容方案 第一部分:Single-SPA微前端demo single-spa-learn-kit :一个基于SPA的基础demo,可以直接run起来 微前端 single-spa :图文并茂,方案有差异,提出几个坑点,留意下: 在配置systemJs引用时会有跨域问题,这时候可以配置nginx的返回头进行解决,详情仓库见。 在构建vue项目时,App.vue文件的主div id必须为你项目构建的id,因为第一次构建后你的html上的div会消失

程序员面试屡次失败?那么请记住这 5 点!让你提高80%面试通过率

廉价感情. 提交于 2020-07-29 10:02:20
一些程序员小伙伴面试的时候屡次遭遇失败,由于我面试结果还不错,所有很多人来询问我一些面试相关的问题, 我这里给到 5 点建议,希望对大家有帮助。 1. 简历应该是你设计过的 「设计简历」可能对这个词有点迷惑,可能你第一感觉是设计得好看一点,其实我想表达的设计是一种「圈套」,给面试设计的「圈套」,下面我会举例子让你明白这个「圈套」是什么。 我举两个点:技术要点和项目经历。 技术要点(就是自己会哪些技术)和项目经历相信是简历里面必不可少的内容,但是也许你可能忽略了哪些应该写。 之前我给别人看简历的时候,我就会问他们写的技术点三个问题 你对这个技术点的掌握程度是什么样的? 你对这个技术点准备了哪些问题? 当问到了相关技术点的时候,你能回答到哪个层次?仅仅了解、用过一两次、熟练使用、还是掌握原理。。。 当你能清楚的回答完这三个问题之后,你对你自己的水平就有了一定的认识,同时你对自己是否符合这个岗位有了一定的判断。我的目的就是让你了解自己的水平,然后才能 针对性 的去复习,查漏补缺,自己心里要有一杆秤,自己把这个知识点掌握到这个程度,能不能胜任这个岗位。 当你了解了之后,然后根据你自己是否有充足的复习时间,你就可以去设计你的技术要点部分了,只写你准备好了的技术点,这个准备好了不是说掌握得很深才叫准备好了,就算是只能回答几个简单的问题也算是准备好了,就是你想准备,然后自己也去复习了的

零基础开始学前端有什么建议?

这一生的挚爱 提交于 2020-07-29 09:57:04
如今,随着物联网时代的到来和网络营销的日益发展,前端技术比以往更加火热。我们可以看到 Web应用与新技术趋势紧密相连,而这直接导致了前端行业广阔的就业前景。正因如此,学习前端的朋友越来越多了。为了帮助大家可以更高效地学习,本文为大家总结了一些零基础开始学前端的建议,希望大家可以少走一些不必要的弯路。 1、前端行业现状和发展前景怎么样? 在学习一门技术之前,我们应该先对整个行业的发展情况有所了解,毕竟有时候选择比努力更重要。随着大型企业对于用户界面体验的要求的高度重视,前端人才的需求也在增加。目前,我们可以在 boss、拉勾网的招聘中看到, Web前端的需求量还是排名第一。当然,前端的广阔发展前景和高薪的待遇回报说明了这不是一个低门槛的行业。近些年,前端语言和框架也实现了不断的升级,前端和后台技术要求达到相同水平。因此,那些在前端行业感觉就业难的朋友,问题可能就出在技术水平还有待提高。因此,前端行业的发展前景毋庸置疑,但前提的是从业者的专业能力能不能跟得上行业的要求。 2、如何规划个人的职业发展路线? WEB前端工程师不是一个简单的职业,在准备进入这个行业之前就要明确自己一个职位目标和发展路线,这样才能在职场上走得更远。资深 WEB前端工程师是一个 WEB前端最基本的选择,需要从业者在专业领域不断学习和积累,把更多的时间花费在技术的钻研上。还有一个很好的职业发展目标是成为

前端教程丨手把手教你用 Next.js 搭建个人博客,从入门到吃鸡

送分小仙女□ 提交于 2020-07-29 09:35:06
React.js 是现今前端最火的应用框架之一,而 Next.js 正是 React.js 领域最优秀的服务端渲染框架之一。 基本上,现在所有的前端主流形式,从服务端渲染 APP,静态站到桌面应用等,Next.js 都能胜任。 不论是国内还是国外,都有不少开发者和企业在使用 Next.js 开发网站,比如: 腾讯新闻移动端门口站腾讯网 大名顶顶的Hulu 视频站 世界最受欢迎的 React UI 组件库Material-UI 魅族官网首页魅族 今天带来一门完整的 Next.js 框架实战课程,作者 luffyZh 老师是网易的高级前端开发工程师,手把手带你逐步掌握 Next.js 框架, 最终完成静态博客+全栈动态博客系统的搭建。 最终项目效果: 个人静态博客系统 全栈动态博客系统 如果你是 React.js 开发者并且想学习一个服务端渲染框架,那么本课程是你很好的选择。 课程分为三个阶段: 一:了解服务端渲染并且初步认识 Next.js,学习使用 Next.js 的各种 API 以及内置约束规则,进行简单的页面开发; 二:学习用多种方式部署 Next.js 应用,满足小型个人和大型企业的各种业务场景; 三:从实践角度出发使用 Next.js 开发两个应用系统,第一个是静态个人博客系统,第二个是全栈开发包含前后端以及数据库的动态博客系统。 课程地址: Next.js 轻量级

开发一个大型后台管理系统,应该用前后端分离的技术方案吗?

末鹿安然 提交于 2020-07-29 09:34:46
话说这天,我们团队开会讨论了一个问题,不,与其说“讨论”,不如说“争吵”更合适。 背景是这样的: 我们要开发一个 xxx 后台管理系统,这个系统业务复杂、功能又多,大家的争吵集中在“这个系统是否应该用前后端分离的方案”。 这次争吵的问题比较典型,于是我就写了这篇文章。为了大家好理解,把“xxx 后台管理系统”泛化一下,变成: 开发一个大型后台管理系统,应该用前后端分离的技术方案吗? 先说一下,本文中的观点肯定有人不认同,再加上我对前端技术掌握有限,所以大家批判的看吧。 1. 先审题,冷静的分析一下 前后端分离的优点多多,这不需要多说,大家人人都清楚。 来,讨论之前,我们先一起好好审审题。 结合“ 开发一个大型后台管理系统 ”这个约束条件,冷静的分析一下: • 什么是后台管理系统:首先后台管理系统这个称呼,意味着这是一个 B 端系统 。可以小到部门级应用(客户投诉登记系统、办公设备台账系统),大一点可以是大集团级核心系统(500 强保险公司客服、呼叫中心),可以是 ERP、CRM、OA(SAP、用友、泛微协同),可以是一个 B2C 电商的商城后台、支付网关管理控制台,可以是 Saas 的管理后台(Salesforce、Teambition、Jira),可以大到阿里云控制台…… • 什么是大型:我理解大型系统是指功能模块多、交互复杂,而不是访问量、TPS、数据量大。所以 CMS、OA

基于React 的audio音频播放组件

橙三吉。 提交于 2020-07-29 09:22:12
基于React 的audio音频播放组件, 自定义播放/暂停按钮、进度条调节、音量调节、倍速播放。 组件代码: AudioPlay.js import React, { Component } from "react"; class App extends Component { constructor(props) { super(props); this.state = { rateList: [1.0, 1.25, 1.5, 2.0], playRate: 1.0, isPlay: false, isMuted: false, volume: 100, allTime: 0, currentTime: 0, }; } componentDidMount() {} formatSecond(time) { const second = Math.floor(time % 60); let minite = Math.floor(time / 60); return `${minite}:${second >= 10 ? second : `0${second}`}`; } // 该视频已准备好开始播放 onCanPlay = () => { const { id } = this.props; const audio = document.getElementById(

程序人生:程序员写简历不要犯这种低级错误!否则第一个淘汰你!

*爱你&永不变心* 提交于 2020-07-29 07:18:15
我有一件很重要的事情要告诉你,但在这之前,我想先谈谈我自己。我是一个非常有魅力的人,我很注重过程,自学能力很强。我是一个非常强力的团队合作者,对构建和创造新事物充满热情。 最重要的是,我有组织能力,积极主动,能够制作出高质量的作品。我很擅长口头和书面交流,我是一名出色的团队合作者。最后还有一点,我总是能够完成超预期的工作。 这段话是不是像极了某些人简历的开头?招聘人员看到这里是不是已经弃稿了? 直截了当 写简历的时候,你应该直截了当。 避免不必要的麻烦。基本上简历的所有内容都应该直截了当,尤其是个人简介部分。简历开头第一段应该能够在10秒内读完,语气应该高昂激进。 告诉你一个秘密:每个人都可以通过简历展现个人超凡的魅力,每个人都是出色的团队合作者,每个人都有出色的书面交流技巧。每个人都可以高效而有条理。每个开发人员都喜欢学习新事物!你的简历开头写这些简直就是在浪费招聘人员的时间,罗罗嗦嗦写了一大堆有什么用?能让你的简历脱颖而出吗? “话虽没错,但是他们仍然会看我的软技能,不是吗?” 人的注意力只有12秒的神话 有人说,金鱼只有7秒的记忆,而人的注意力也只有8-12秒。尽管英国BBC在几年前揭穿了这个谣言,但说实话,我们有必要研究我们的注意力是否真的有限吗? 假设普通招聘人员只需30秒(已经很长了吧)的时间就能建立对你的第一印象。你再去试试阅读本文的第一段,大约需要13-18秒?况且

react结合antd4.0和umi3.0的404界面

ぃ、小莉子 提交于 2020-07-29 06:11:03
import { Button, Result } from 'antd'; import React from 'react'; import { history } from 'umi'; // FC = Functional Component 使用这个类型有个好处就是,提醒你必须返回一个ReactNode // 在函数式组件中,无法像在类组件中一样使用state和生命钩子函数,但React提供了HOOK const NoFoundPage: React.FC < {} > = () => ( < Result status ={404} title ="404" subTitle ="Sorry, the page you visited does not exist." extra ={ <Button type ="primary" onClick ={() = > history.push('/')}> Back Home </ Button > } /> ); export default NoFoundPage; { path: '*', component: '@/pages/404' }, 来源: oschina 链接: https://my.oschina.net/u/4347380/blog/4292551

带你实现 react-redux

↘锁芯ラ 提交于 2020-07-29 06:09:13
前言 之前我们实现了 redux 的功能,这次我们来实现一下配合 redux 开发中经常会用到的一个库—— react-redux。本文不会详细介绍 react-redux 的使用,另外需要了解 Context API, 再看此文就很容易理解了。可以看看我之前写的几篇文章 实现一个迷你Redux(基础版) 实现一个Redux(完善版) 浅谈React的Context API react-redux 基本使用 用个简单的加减数字作例子, 把代码贴出来: redux.js import { createStore } from 'redux' // actions const ADD_NUM = 'ADD_NUM' const DESC_NUM = 'DESC_NUM' // action creators export function addNumAction ( ) { return { type : ADD_NUM, } } export function reduceNumAction ( ) { return { type : DESC_NUM, } } const defaultState = { num : 0 , } // reducer const reducer = ( state = defaultState, action ) => { switch