首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何用120行代码,实现一个交互完整拖拽上传组件?

How To Implement Drag and Drop for Files in React 文章讲了React拖拽上传精简实现,但直接翻译照搬显然不是风格。...于是又用React Hooks 重写了一版,除CSS代码总数 120行。 效果如下: ? 1....React Hooks 新增useRef API 语法 const refContainer = useRef(initialValue); useRef 返回一个可变 ref 对象,。...阻止默认行为 代码很简单: e.preventDefault() //阻止事件默认行为(如在浏览器打开文件) e.stopPropagation() // 阻止事件冒泡 每个事件阶段都需要阻止,为啥呢...事件在生命周期里触发与销毁 原本EventListener事件需要在componentDidMount添加componentWillUnmount销毁: componentDidMount (

1.8K30

实战为王,从零封装 Icon 组件

在学习 props 属性之后,结合一个实践案例,我们就能够扎实掌握它。 实践应用,图标的使用无处不在。小到编辑器功能按钮,大到 chrome 浏览器任务栏,都有大量图标需要处理。...到了现在,字体图标早已经不是什么黑科技,它几乎被普及到了所有网站。 CSS3 ,有一个语法可以自定义字体 @font-face。如果字体库是由图标组成,那么我们就可以创建字体图标。...假设我们期望 HTML 中放入一个代表图标的标签 那么,只要它对应 CSS 这样写,就可以页面上显示出字体库图标 .icon-warn {...--通过对spin修改,来控制图标是否旋转--> 其余我们可能在实践还会添加需求,到时候再根据需求做改进即可。...然后 components 目录下创建 Icon 目录。并分别创建 index.tsx 与 index.scss。我们将字体图标下载下来,存放于Icon目录fonts目录

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Taro 小程序开发大型实战(二):多页面跳转和 Taro UI 组件库

在上一篇教程[1],我们用熟悉 React 和 Hooks 搞定“奥特曼俱乐部”雏形。...这一篇完成后 DEMO 如下: 具体有三个页面: 主页:展示所有帖子,以及添加新帖子按钮。 帖子详情:展示单个帖子全部内容。 个人主页:展示当前用户个人信息。...为了方便管理,我们需要引入一个新 prop(isList),用于判断此组件是显示首页列表,还是帖子详情页面。...具体而言, Taro 实现页面跳转只需两个步骤: 入口文件(src/app.jsx) App 组件 config 配置之前提到 pages 属性 在任意组件通过 Taro.navigateTo... PostCard 添加跳转逻辑 我们首先在 PostCard 组件添加跳转逻辑,使得它被点击后将进入该帖子详情页面。

2.7K20

用 React 构建可复用设计系统

React 让书写漂亮,并富有表达力代码更加容易。然而,如果组件不能很好复用,随着时间推移代码变得更加零散和更加难以维护。 曾经看到代码库,同样 UI 有十几种不同实现!...遵守这一规则会简化我们样式很多问题。 让我们代码先设置一个基本网格系统。我们从设置布局 app 组件开始。...最后,我们将在 SCSS 定义样式。...storiesOf 定义一个新 story,一般就是你组件。然后,通过 add 添加章节,为了展示组件不同状态。 ?...当然,这是非常基本,但是 storybooks 有一些插件可以帮助你添加文档。还注意到她们也支持 emoji?

3.2K30

用 React 构建可复用设计系统

React 让书写漂亮,并富有表达力代码更加容易。然而,如果组件不能很好复用,随着时间推移代码变得更加零散和更加难以维护。 曾经看到代码库,同样 UI 有十几种不同实现!...遵守这一规则会简化我们样式很多问题。 让我们代码先设置一个基本网格系统。我们从设置布局 app 组件开始。...}; 最后,我们将在 SCSS 定义样式。...storiesOf 定义一个新 story,一般就是你组件。然后,通过 add 添加章节,为了展示组件不同状态。 ?...当然,这是非常基本,但是 storybooks 有一些插件可以帮助你添加文档。还注意到她们也支持 emoji?

1.4K20

基于 TS React 模板项目,集成 eslint sass,采用 StandardJS 代码风格,包含自动注册组件等各项功能,新建项目或 React 学习必备

很不喜欢 js 写 css。所以,项目中构建了 style 文件夹,所有的 scss 文件均放在此处。然后项目入口中加以引用,即可。...style scss 说明 项目 @/style/ 目录,我们可以新建多个文件夹、多个层级文件夹,在里面编写 scss 文件。...该命令会启动一个进程,当发现有新 scss 文件时,就会自动添加进去。一般项目稳定时,是不需要启动这个进程。...当然,这只是个含义,现代框架库不管这些…… 但有些传统我们是要坚持(一位逐渐秃顶前端如是说……) 同自动组件一样,这样规划,js 和 scss 文件分离了,找起来可能不太好找。...因此,需要大家用一定规则去组织文件夹以及文件,这样才能不乱。 这样搞得好处是,无需其他配置,即可在 scss 文件中使用混入、引用等各种高级特性

1.8K20

css模块化及CSS Modules使用详解

那么css模块化思想,也就是css编写环境,用上模块化思想,把一个大项目,分解成独立组件,不同组件负责不同功能,最后把模块组装,就成了我们要完成项目。 css模块化有什么好处?...无法共享变量 复杂组件要使用 JS 和 CSS 来共同处理样式,就会造成有些变量 JS 和 CSS 冗余,Sass/PostCSS/CSS 等都不提供跨 JS 和 CSS 共享变量这种能力。... 由于 .normal  composes  .base,编译后会 normal 会变成两个 class。 composes 还可以组合外部文件样式。...幸运是,CSS Modules 这点做很好: 如果对一个元素使用多个 class 呢? 没问题,样式照样生效。 如何一个 style 文件中使用同名 class 呢?...├── Component.js └── Component.scss 这样所有全局样式都放到 src/styles/app.scss 引入就可以

6.6K100

vue3 实战总结

,也是 react-hook 开源作者疑问 官方表述 ui 和逻辑一致性 白话版翻译 js 本身提供更灵活使用方式 jsx 不仅仅可以 v-show,还可以添加更多 style,color...,数据变化时 render 函数重复触发对浏览器性能就是极大消耗,官方也提供例如 useMemo,useCallback 这样hook实现手动缓存 技术选型为jsx原因 语法检查,函数式编程,...不管是 hook 还是 setup 只要使用了新写法确实在大型项目中能减少很多代码,实现方法公用,减少了生命周期中操作 react比较代码量和方法使用简易程度 // 新写法代码量和逻辑切割上面更有优势...&message({}) watchEffect watchEffect 是没有中间状态,可以监听所有属性变化,立即执行,vue2复杂写法现在api可以更少代码量实现 // vue2.../index.module.scss' export default defineComponent({ render() { //使用函数变量控制样式,setup也可与数据关联判断

2K30

vue3 实战总结

,也是 react-hook 开源作者疑问 官方表述 ui 和逻辑一致性 白话版翻译 js 本身提供更灵活使用方式 jsx 不仅仅可以 v-show,还可以添加更多 style,color...,数据变化时 render 函数重复触发对浏览器性能就是极大消耗,官方也提供例如 useMemo,useCallback 这样hook实现手动缓存 技术选型为jsx原因 语法检查,函数式编程,...不管是 hook 还是 setup 只要使用了新写法确实在大型项目中能减少很多代码,实现方法公用,减少了生命周期中操作 react比较代码量和方法使用简易程度 // 新写法代码量和逻辑切割上面更有优势...&message({}) watchEffect watchEffect 是没有中间状态,可以监听所有属性变化,立即执行,vue2复杂写法现在api可以更少代码量实现 // vue2.../index.module.scss' export default defineComponent({ render() { //使用函数变量控制样式,setup也可与数据关联判断

25320

基于 React 实现一个 Transition 过渡动画组件

因此需要给 Transition 组件添加一个 toggleClass 属性,标识要切换 class 样式,再添加一个 action 属性实现样式切换,action 为 true 时添加 toggleClass...另外, React ,props.children 包含组件所有的子节点,即组件开始标签和结束标签之间内容(与 Vue slot 插槽相似)。...例如: 默认按钮 Button 组件获取 props.children,就可以得到字符串“默认按钮”。.../Transition.jsx' export { Transition } export default Transition 然后, Transition.jsx 文件为组件添加 props...不同浏览器要求使用不同前缀,因为火狐和IE都已经支持这两个事件,因此,只需针对 webkit 内核浏览器进行兼容 webkitTransitionEnd 事件检测。

5.9K20

Sass和SCSS之间不同之处是什么?

Sass和SCSS之间不同之处 这是2014年4月28日发布文章更新版本 已经(http://www.sitepoint.com/author/hgiraudel/) 里写了很多关于Sass,...但是,Sass看起来就像这样,直到3.0版本2010年5月问世,为Sassy CSS引入了一种名为SCSS全新语法。...因为一个错误缩减可能会破坏整个“.sass”样式表,所以它确保编码始终保持干净且格式良好。有一种编写Sass代码方法:好方法。 但要小心!Sass缩进means something。...SCSS语法优点 (对于启动器,它是完全兼容CSS。它意味着,你可以重命名一个“.scssCSS文件并且它将just work。...喜欢它是因为短而且容易。最后一刻改变主意之前实际上正将整个代码库移到Sass。感谢过去自我,以阻止这一举动,因为我们一旦使用缩进语法,它将很难与我们几个工具一起使用。

91820

React 折腾记 - (10) UmiJS 2.x + antd 重写后台管理系统记录问题及解决姿势

(nuxtjs既视感) dva(基于redux+redux-saga封装方案):写起来有vuex感觉; 主要记录在过程遇到问题及解决姿势,技术栈 antd 3.11.x + umi 2.x...封装一些组件过程,用了React.Fragment(: 简写)来保证组件同级并列 有些必须需要props.children带上一些属性或者样式来保证想要效果....)方法,与常规数组用法类似,只是参数不一样 React.cloneElement: 如名字所示,克隆子元素 这是上篇文章用到部分内容,需要改造传递进来按钮,给添加样式 // 构建 // 克隆子组件并且添加自己要添加特性...所以全局性放在全局更为合适,当然你不需要动态引入的话,页面间跨调是允许..目前是这么做; ---- pages目录下文件或者目录不自动生成对应可访问page 默认page目录下,除了部分特殊文件...就是缩小时候隐藏部分子菜单,这个问题在做侧边栏变水平时候遇到.缩小到ipad尺寸 会溢出,用了常规法子,就正常,就是style那里设置一个最大宽度或者宽度 至于风格变化是因为antd内置两套风格

3.2K20

这样入门 js 抽象语法树(AST),从此来到了一个新世界

Rollup 是一个不错选择,但是(自虐般地)选择 Typescript 自带编译器 tsc ,然后就开始填坑之旅~ tsc 遇到使用 tsc 编译代码时,对目前来说,...简化引用路径问题 首先 tsconfig.json 写了简化引用路径配置,比如针对以上目录,是这样: { "compilerOptions": { "baseUrl":...,要是想引用 util 或 assets 里面的文件模块、资源就会特别方便,比如我 index.tsx 文件这样引入:编译前: import classNames from "@Utils/...引入样式文件后缀名问题 我们做一个项目时在所难免会用到 sass 或 less ,本项目就选择 sass , index.tsx 引入样式文件方式如下: import "....就在一筹莫展之时,突然想到,卧槽,这不就是类似于上面提到 tscpaths 这个工具吗,也是文件内做字符串替换,太像

1.7K21

vue弹窗屏蔽滑动两种解决方案

2019-5-28 任世界改变,未时过境迁 序   开发过程,我们经常会遇到要加弹窗需求,而如果当前页展示数据一屏展示不完,则在打开弹窗后,有滑动操作时,页面也会随之滑动。...,保存到data;②给body添加步骤1css;③设置body高度为刚才获取到高度。...移除方法: ①将刚才冬天给body添加css移除;②当前滑动高度设置为data存储高度。 b. 效果 ? c....备注 .modalOpencss样式,放在公共样式,因为我们要改变是body样式,因此组件样式可能会失效。...例如,将样式放在 src/assets/css/common.css /*弹层*/ body.modalOpen { -webkit-overflow-scrolling:touch;

1.8K10
领券