细节知识点
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);