五月前端细节总结

细节知识点

1、代码格式

数学操作符两侧留空格;props数据类型监测放在类前面;翻译;warning;函数名变量名是否最佳;减少不必要的props, state;减少不必要的请求;

使用一个代码(JS-css)尽量避免其他样式的改变(不需要的不要加,避免画蛇添足);

屏幕录制的结束快捷键:control + command + esc

webpack 内存溢出解决方法:配置

"scripts": { "start": "node scripts/start.js", "build": "node scripts/build.js", "test": "node scripts/test.js --env=jsdom", "dev": "export NODE_ENV=development && node config/server.js --max-old-space-size=4096 --inline --progress" }, 

一些常用的东西,例如 SeafileAPI,可以绑定到全局变量。例如设施 window.seafileAPI = seafileAPI 这样其他地方很容易调用这个变量了。

  • 编译成中文: 将 po 文件转化成 mo 文件。

run.sh python-env /data/dev/seahub/manage.py compilemessages

docker 内部运行 到seahub目录下运行,编译出来即可(需要几分钟)

run.sh python-env /data/dev/seahub/manage.py compilemessages 
2、input

1、input submit 等受控组件,点击后需要 event.preventDefault 阻止默认事件(界面跳转)。这部分受控组件中的变量直接可以显示输入的内容。这里可以显示一部分用户输入(但是界面不会提醒用户输入的内容不规范)。

handleInputChange = (event) => { event.preventDefault(); this.setState({ value: event.target.value.toLowerCase.replace(/i/g, 'I'); }); } 

打开对话框后,内部的输入框 input 自动聚焦

传统的JS中,直接使用 focus 方法,即可使输入框对焦。

在 React-Strap 中,不能直接使用这个方法,在 Modal 设置 autofocus 貌似没用,所以获取DOM并对焦

<Input innerRef={input => {this.newInput = input;}}/> constructor(props) { super(props); this.state = {}; this.newInput = React.createRef(); } componentDidMount() { this.newInput.focus(); this.newInput.setSelectionRange(0, 0); } 

这样做就可以使得对话框打开后聚焦

回车键后提交内容,需要阻止默认事件

setSelectionRange 可以从一个被 focused 的 input (https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input) 元素中选中特定范围的内容。

input.setSelectionRange(2,5); 
3、CSS3

设置一个界面动画的暂停和继续(JS点击按钮,动画暂停或者显示)

div { animation-play-state:paused; animation-play-state:running; -webkit-animation-play-state:paused; /* Safari 和 Chrome */ } 
handleButtonClick = () => { this.refs.div.style.animationPlayState = 'running' } 

高度宽度单位 vh vw (view height width) 相对于视口的高度和宽度,取值是0~100。某个元素相对于浏览器视口的高度。主要用于浏览器兼容问题,谷歌浏览器实际宽度和视口宽度一致,一部分浏览器实际宽度和视口宽度不一致,所以需要设置这个宽度(当浏览器缩放时,图片尺寸会变化);

background-size 表示背景图片的尺寸:可以使用px/%/container/cover

PX是绝对尺寸,% 是相对于div的尺寸。container 表示背景铺满div,但是不够的地方是黑色的,背景图片可以完全显示在div上面。cover 表示背景铺满div并且可能超出,一部分背景图片显示不全。通常使用cover属性。

JS 中一个组件,调用另一个组件的方法时

if (obj) obj.method(); // 首先判断这个外部对象是否存在,然后再执行这个对象的方法(如果外部组件没有传入,这个组件不会报错) 

react 中不需要用 状态变量传递信息(让一个状态刷新子组件的列表内容)如果有这种情况,一定是其他地方还有更好的写法,把刷新子组件列表内容放在父组件中

进行异步操作时,不确定服务器相应的时间,最好加一个loading图标。可以打开对话框,最好在对话框中显示加载状态。

react cookies 库

import cookie from 'react-cookies'; cookie.load('last_visiter') ookie.save('view_mode', value);