经验
1.传入的props,需要用的先用简单的名字保存起来,方便编写:
2.解构赋值传参:
(1)左部解构赋值
const { onReset, onIncrement, onDelete, onDecrement, counters, onRestart } = this.props;
- 左部解构赋值并不是浅拷贝
但是,如下的代码,可以在某种程度上避免误修改props
const {tags} = this.props;
const {aaa, bbbb} = tags ;
(2)快速赋值props
<Menu.Item {...props} key={props.key} >
(3)过滤参数
const { extraProp, ...passThroughProps } = this.props;
<WrappedComponent {...passThroughProps} />
//这样就把extraProp过滤掉了
3.事件处理函数的绑定,{handleName},此处不可以加”()“,其意思为渲染后立刻执行此回调函数。类似这样**{handleName(true)}**都不可以。
可以这样:
const handleDelete = () => {
onDelete(id);
};
这样:
const onDelete = () => {
onDelete(id);
};
也就是,把它单拎出来,在重新包装一下。虽然没做什么事情。
4、foreach对于原数组的改变
对于item是基本数据类型:item不可以改变
对于item是对象:可以改变,只要不改变地址就可以。
总结:它另存了一个变量item存每次遍历的变量,不可改变只是针对item,想改变可以直接通过原数组,以该形式numsname[index]去赋值即可。
5、没有什么实际含义的根标签,就可以用(这个就是fragment)
<>
</>最终输出的html没有任何影响
6、删除数组某一个元素
let newState = state.filter(i => {
return i.id !== id;
});
7、在一个函数中使用setState,由于其是异步的,所以console出来的值不是最终值,需要牢记。
8、为什么需要受控组件(又要需要内存维护value值,相对于vue来说,react对于开发者这种交互是暴漏在我们的视野的)
9、重置表单:
const initialValues = {
weight: '',
height: '',
date: ''
}
setState(initialValues);//经典吧
10、数组初始化null
Array(9).fill(null)
11、对象浅拷贝
-
方法
Object.assign( { }, prevState.jasper , { score : 2 } )
-
右侧解构赋值
jasper = { ...prevState }
12、数组浅拷贝
-
方法
this.state.squares.slice()