博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android攻城狮前端遇坑指南
阅读量:7023 次
发布时间:2019-06-28

本文共 4170 字,大约阅读时间需要 13 分钟。

决定一个人命运的不是能力而是选择

1.加快安装

npm config set registry

2.写代码过程中webstorm底部一直闪烁,代码也提示不了

File->Invalidate Cahes/Restart -> Invalidate and Restart复制代码

3.按钮未点击自动执行点击事件

handlerClick = (questionId)=>{    console.log('我执行了')}复制代码
handlerClick (questionId){    console.log('我被点击了')}复制代码
第一种和第二种是两种常见的函数定义方法,第一种是箭头函数,第二种是普通函数。推荐用箭头函数
  • 避免普通函数this造成的一系列问题,而箭头函数this指向函数定义的组件
  • 每次刷新组件都会重新执行bind方法,对性能有影响
但是第一种箭头函数确带来了奇怪的问题:按钮未点击handlerClick函数自动执行了,而不传参数的话是不会自动执行的,这是为什么?明明看起来两种写法差不多!在讲这个问题之前我们首先来看一下匿名函数
function (){    console.log('我执行了')}复制代码
忽略箭头函数的内部细节,我们发现其实箭头函数就是匿名函数。再来看看匿名函数是如何执行的
(function (){    console.log('我执行了')})()复制代码
聪明的你应该发现问题了,第一种箭头函数传参就相当于匿名函数立即执行。讲清楚了为什么会立即执行,看下如何解决
复制代码
这有什么区别?第一种箭头函数的写法等价于
onClick=(function(){    console.log('我执行了') })(questionId)复制代码

第二种等价于

onClick=function(){    return function handlerClick(questionId){        console.log('我执行了')     }}复制代码
那么bind为什么不会立即执行?因为bind返回的还是函数

4.ant Design Select组件的坑

复制代码
开始allClass是空数组,等到网络请求返回allClass才有数据,然后组件会刷新。这时候很奇怪defaultValue没有刷新,莫名其妙的设置不了默认数据。会出现下图所示的情况

下面的写法可以避免这种情况
{ allClass.length !== 0 ?    : 
}复制代码
这种写法更优雅
{ allClass.length !== 0 &&   }复制代码

5.react.setState()之后不能获取更新后的数据

下面获取到的count还是-1
this.state={    count = -1};this.setState({ count: 0 });console.log(this.state.count);复制代码
实际上setState并不会立马执行,它会把状态存到队列中,稍后才会更新state的值,下面的写法可以避免这种情况
this.setState({ count: 0 },() => console.log(this.state.count))复制代码

6.自己搞的简易的react Componet

export default class Component {    constructor(props = {}) {        this.props = props;    }    setState(state) {        const oldEl = this.el;        this.state = state;        this._renderDOM();        if (this.onStateChange) this.onStateChange(oldEl, this.el);    }    _renderDOM() {        this.el = this._createDOMFromString(this.render());        if (this.onClick) {            this.el.addEventListener('click', this.onClick.bind(this), false)        }        ;        return this.el;    }    _createDOMFromString = (domString) => {        const div = document.createElement('div');        div.innerHTML = domString;        return div;    }        mount = (component, wrapper) => {        wrapper.appendChild(component._renderDOM());        component.onStateChange = (oldEl, newEl) => {            wrapper.insertBefore(newEl, oldEl);            wrapper.removeChild(oldEl);        }    }    onStateChange(oldEl, newEl) {}    render() {}    onClick() {}}复制代码

7.react-router-dom使用

函数方式跳转传参
this.props.history.push({      pathname: '/detail',      state: {        id: 3     })复制代码

防止重复跳转死循环

this.props.history.replace('/detail');复制代码

goBack返回

this.props.history.goBack();复制代码

8.redux使用,redux用于数据共享

index.js注册import counter from './reducers/index';import {createStore} from 'redux';const store = createStore(counter);const render = () =>    ReactDOM.render(
store.dispatch({
type: 'INCREMENT'})}//action onDecrement={() => store.dispatch({
type: 'DECREMENT'})} />, document.getElementById('root'));render();store.subscribe(render);复制代码
creare函数export default (state = 0, action) => {    switch (action.type) {        case 'INCREMENT':            return state + 1;        case 'DECREMENT':            return state - 1;        default:            return state    }}复制代码
组件 const {value, onIncrement, onDecrement} = this.props; 

{value}次数拉拉拉

复制代码

9.js精度问题

0.07.toFixed()*100 = 7.00000000000000001%复制代码
(0.07*100).toFixed() = 7%复制代码

好用的js方法

1.正确返回字符串长度
function length(str) {  return [...str].length;}复制代码

或者

function countSymbols(string) {  return Array.from(string).length;}复制代码

2.判断一个字符是单字节还是双字节

function is32(c){  return c.codePointAt(0) > 0xFFFFFF;};复制代码

3.正则判断金额是否正确

let s = "1512.1";let patter = /^\d+\.?\d{1,2}$/g.test(s);复制代码

4.将数组中布尔值为false的成员转为0

Array.from([1, , 2, , 3], (n) => n || 0)复制代码

5.数组去重

[...new Set([1,2,3,4,5,2])]复制代码

6.去除重复字符串

[...new Set('ababbc')].join('')复制代码

转载于:https://juejin.im/post/5c17025ff265da614273cc85

你可能感兴趣的文章
ARP欺骗与中间人攻击
查看>>
iOS 写入文件保存数据的方式
查看>>
IPUtil
查看>>
window.open居中显示
查看>>
easyui的 一些经验
查看>>
ruby(wrong number of arguments (1 for 2) )
查看>>
Python文件操作(文件,正则)
查看>>
[论文收集] CHI 2011 Workshop on Crowdsourcing and Human Computation
查看>>
IIS7站点/虚拟目录中访问共享文件夹(转)
查看>>
小程序实现textarea随输入的文字行数变化高度自动增加
查看>>
Jenkins高级篇之Pipeline
查看>>
leetcode — subsets-ii
查看>>
html5shiv主要解决IE6-8 无法识别HTML5的新标签,父节点不能包裹子元素,以及应用CSS样式...
查看>>
大数据应用实例
查看>>
8个提高效率的CSS实用工具
查看>>
[蓝桥杯历届题目] 正六面体染色 ; 取字母组成串
查看>>
二分查找
查看>>
HDU ACM 1163 Eddy's digital Roots
查看>>
ARCGIS 数据格式
查看>>
C语言创建文件
查看>>