react

Rematch的深入学习与实战应用(一),简易数字计数器

扶醉桌前 提交于 2020-08-17 14:00:52
摘要    近期在优化团队代码,发现Redux重复使用的代码过多。 经过调研发现了Rematch库:Redux是一个出色的状态管理工具,并且有着健全的中间件生态以及出色的开发工具;Rematch是没有boilerplate的Redux最佳实践。移除了声明action类型、action创建函数、thunks、store配置、mapDispatchToProps、sagas等东西,大大简化了代码。故今天就来分享rematch的用法。 Rematch的用法 1.初始化全局设置store    I nit(config) :初始化Rematch,在init中可以配置属于自己的使用的config参数。    Models :导出和存储项目的状态管理,models详细的参数说明可以到官网查看文档进行阅读。    Plugins :用来自定义init配置或背部hooks,可以添加功能来设置Rematch,更多的插件可以阅读官网插件的API进行学习。    Redux :可以对redux设置访问以及覆盖redux方法的选项,可以保留redux中优秀的方法等。 import { init } from '@rematch/core'; import thunk from 'redux-thunk'; import immerPlugin from '@rematch/immer'; import

传统diff、react优化diff、vue优化diff

若如初见. 提交于 2020-08-17 13:52:28
传统diff 计算两颗树形结构差异并进行转换,传统diff算法是这样做的:循环递归每一个节点 传统diff.png 比如左侧树a节点依次进行如下对比,左侧树节点b、c、d、e亦是与右侧树每个节点对比 算法复杂度能达到O(n^2),n代表节点的个数 a->e、a->d、a->b、a->c、a->a 查找完差异后还需计算最小转换方式,这其中的原理我没仔细去看,最终达到的算法复杂度是O(n^3) react优化的diff策略 传统diff算法复杂度达到O(n^3 )这意味着1000个节点就要进行数10亿次的比较,这是非常消耗性能的。react大胆的将diff的复杂度从O(n^3)降到了O(n),他是如何做到的呢 由于web UI中跨级移动操作非常少、可以忽略不计,所以react实现的diff是同层级比较 react的diff.png 拥有相同类型的两个组件产生的DOM结构也是相似的,不同类型的两个组件产生的DOM结构则不近相同 对于同一层级的一组子节点,通过分配唯一唯一id进行区分(key值) react虚拟节点 dom中没有直接提供api让我们获取一棵树结构,这里我们自己构建一个虚拟的dom结构,遍历这样的数据结构是一件很轻松直观的事情。 对于下面的dom,可以用js构造出一个简单的虚拟dom <div className="myDiv"> <p>1</p> <div>2</div>

从零搭建 React 开发 H5 模板

夙愿已清 提交于 2020-08-17 12:55:55
本文相关代码地址: github 效果展示: react-demo 项目创建 创建项目文件夹 mkdir react-demo cd react-demo npm init -y 复制代码 依赖安装 yarn add react react-dom yarn add webpack webpack-cli webpack-dev-server webpack-merge babel-core babel-loader babel-polyfill babel-preset-env babel-preset-react babel-preset-stage-0 cross-env file-loader jsx-loader css-loader style-loader url-loader less less-loader --dev 复制代码 webpack 配置 区分开发环境 development 和生产环境 production 配置 分别创建对应的 配置文件 antd-mobile 按需加载 安装插件 yarn add babel-plugin-import -D 复制代码 修改 babel.config.js 配置 module .exports = { presets : [ "@babel/preset-env" , "@babel/preset-react" ]

初学编程,我们每次在编完代码之后什么都记不住!这应该怎么办呢?

北城余情 提交于 2020-08-17 10:49:37
初学编程,为什么我们在编完代码之后什么都记不住?其实不仅仅是是大学初学编程的小伙伴们,就连笔者,在我最开始学习编程的时候,也是敲一次程序忘一次代码,开始的时候我也想不通,以为是我不适合学习编程,所以每次都会在学习编程语言的时候,强迫努力记住所有一切,结果还是记不住,渐渐地我发现: 虽然有些人可以过目不忘,直接在脑海里就能想出问题的解决方案,但普通人却不能。特别是那些刚开始学习和探索编程世界的人,比如我自己。我逐渐了解到,记住所有你接触过的代码是一件不可能的事情!所以后来我就渐渐放弃了,也认清了记不住代码不是不适合学编程的现实。那么问题来了:在程序员的职业生涯中,那么我们该如何解决这一问题? ​ 要明白你能做什么,而不是记住怎么做 其实,代码可以构建的功能有无数种可能性!你可以设想通过代码构建任何内容,只有你想不到的,没有构建不了的。学习一种新语言是一件非常令人激动的事情。查看问题以及代码示例,并通过这些示例学习如何利用这种语言以及/新概念完成工作,这都非常重要,但我们无法记住所有的信息,不要做无谓的尝试!你可以在今后需要实现的时候,再反过来查看,刚开始的时候,你只需要记住这种概念可以实现什么样的功能。 在我深入研究React.js时,这种方式给予了我的学业很大帮助。实现的可能性太多了,你有无数种方式传递props、创建新state、组合组件——实在太多了!就像一个大谜团!

年终课程盘点|16 个 Python 综合实战项目合集

天涯浪子 提交于 2020-08-17 08:46:08
今天,就来给大家盘点一下,2019 年实验楼的 Pyhton 项目里,最值得一做的几个项目。 警告: 本来只想推荐几个课程的,但 Python 的好项目实在是太多了!无法割舍,最后决定推荐 16 个。 这些课程要么特别实用,要么特别装逼,拿来武装自己的简历再好不过了。如果你也不巧中了学习的毒,过年在家沉迷其中,代码撸得飞起,面对家人、朋友的指责,请不要甩锅给我们,请正大光明地告诉他们: Python 项目 1. Python 数据分析入门与进阶(数据分析方向) 通过 Python 数据分析和算法,实现【苹果公司股票分析、实验楼课程数据统计、用户情绪分析、潜在客户分析】等项目: https://www.shiyanlou.com/courses/764 2. Flask + VueJS 全栈 Web 开发实战(Web开发方向) 使用 Python 的 Flask 框架和 VueJS,通过两个实战项目留言板项目和论坛应用的练习,掌握 Flask + VueJS 进行 Web 开发的能力。 https://www.shiyanlou.com/courses/878 3. Python 实现搜索引擎(爬虫+Web框架) 利用 Python 异步特性实现异步爬虫系统,一步一步地将构建索引、索引压缩、排名算法等环节编码实现,最后利用异步 web 框架 sanic

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

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

Webpack 打包太慢?来试试 Bundleless

孤人 提交于 2020-08-17 05:21:05
一 引言 Webpack 最初是为了解决前端模块化以及使用 Node.Js 生态的问题而出现,在过去的 8 年时间里,Webpack 的能力越来越强大。 但因为多了打包构建这一层,随着项目的增长,打包构建速度越来越慢,每次启动都要等待几十秒甚至几分钟,然后启动一轮构建优化,随着项目的进一步增大,构建速度又会降低,陷入不断优化的循环。 在项目达到一定的规模时,基于 Bundle 的构建优化的收益变得越来越有限,无法实现质的提升。我们从另一个角度思考,webpack 之所以慢,主要的原因还是在于他将各个资源打包整合在一起形成 bundle,如果我们不需要 bundle 打包的过程,直接让浏览器去加载对应的资源,我们将有可能可以跳出这个循环,实现质的提升。 在 Bundleless 的架构下,我们不再需要构建一个完整的 bundle,同时在修改文件时,浏览器也只需要重新加载单个文件即可。由于没有了构建这一层我们将能够实现以下的目标: 极快的本地启动速度,只需要启动本地服务。 极快的代码编译速度,每次只需要处理单个文件。 项目开发构建的时间复杂度始终为 O(1),使得项目能够持续保持高效的构建。 更加简单的调试体验,不再强依赖 sourcemaps 即可实现稳定的单文件的 debug。 基于以上的可能性 Bundleless 将重新定义前端的本地开发,让我们重新找回前端在 10

react学习第五天(版本16.13.1)高阶开发

旧城冷巷雨未停 提交于 2020-08-17 02:47:58
1、 父组件中如果state中的对象发生变化,子组件会重新加载吗?生命周期函数 shouldComponentUpdate 答案: 会重新加载 如何处理 在子组件中进行判断,是否更新 shouldComponentUpdate ( nextProps , nextState ){ // console.log(nextProps,nextState) // 根据值进行判断 if ( nextProps . nowTime === this . props . nowTime ){ return false } else { return true } } 第二中处理方式,使用pure进行对象浅比较 export default class Usa extends React . PureComponent { // shouldComponentUpdate(nextProps,nextState){ // // console.log(nextProps,nextState) // if(nextProps.nowTime === this.props.nowTime){ // return false // }else{ // return true // } // } render (){ console . log ( "USA" ) return ( < div > <

React Hooks 学习笔记

*爱你&永不变心* 提交于 2020-08-17 02:24:54
引言 2019 年开始,在使用React的时候,已经逐步从 Class 组件,过渡到函数组件了。虽然函数组件十分便捷,但是在使用函数组件的时候,还是有一些疑惑的地方,导致有时候会出现一些奇奇怪怪的问题。在这里,我想通过官网和博客文章以及自己的一些积累,整理下最佳实践,以备不时之需。 Hook 不会影响你对 React 概念的理解。 恰恰相反,Hook 为已知的 React 概念提供了更直接的 API:props, state,context,refs 以及生命周期。稍后我们将看到,Hook 还提供了一种更强大的方式来组合他们。 下面是一些官方列举的,提出并使用 hooks 的一些动机。 在组件之间复用状态逻辑很难 你可以使用 Hook 从组件中提取状态逻辑,使得这些逻辑可以单独测试并复用。 Hook 使你在无需修改组件结构的情况下复用状态逻辑。 这使得在组件间或社区内共享 Hook 变得更便捷。 复杂组件变得难以理解 useEffect 我们经常维护一些组件,组件起初很简单,但是逐渐会被状态逻辑和副作用充斥。每个生命周期常常包含一些不相关的逻辑。例如,组件常常在 componentDidMount 和 componentDidUpdate 中获取数据。但是,同一个 componentDidMount 中可能也包含很多其它的逻辑,如设置事件监听,而之后需在

在React JSX内部循环

依然范特西╮ 提交于 2020-08-16 22:33:11
问题: I'm trying to do something like the following in React JSX (where ObjectRow is a separate component): 我正在React JSX 尝试执行以下操作(其中ObjectRow是一个单独的组件): <tbody> for (var i=0; i < numrows; i++) { <ObjectRow/> } </tbody> I realize and understand why this isn't valid JSX , since JSX maps to function calls. 我意识到并理解为什么这不是有效的 JSX ,因为 JSX 映射到函数调用。 However, coming from template land and being new to JSX , I am unsure how I would achieve the above (adding a component multiple times). 但是,由于来自模板领域并且是 JSX 新手,所以我不确定如何实现上述目标(多次添加组件)。 解决方案: 参考一: https://stackoom.com/question/1XzLW/在React-JSX内部循环 参考二: https:/