数据去重方法
- set去重(
Array.from(new Set(arr)) - 遍历两遍数组,如果当前元素在后面数组中存在,则把后面数组的元素删除(
arr.splice(j, 1)) - 建立一个空数组,将数组遍历一遍,判断当前元素在结果数组中是否存在(
array.includes( arr[i]|array.indexOf(arr[i])) - filter去重,使用过滤,只选取第一个查到的元素
return arr.filter(function (item, index, arr) {
//当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
return arr.indexOf(item, 0) === index;
});
Record | Pick的使用
React数据传递的方法
- props
- 可以传递数据
- 可以传递方法,在子组件中调用,可以修改父组件中的方法
- context
- 创建context.js 引入
const { Consumer, Provider } = React.createContext() - 引入 Provider ,包裹组件并传递数据
return ( <Provider value={{name:this.state.obj.name,age:this.state.obj.age}}> <div className="App"> app <Parent></Parent> <hr /> <Uncle></Uncle> </div> </Provider> )- 引入 ConSumer ,包裹组件并读取数据
return (<Consumer> {({age})=><div> 编程不仅仅是技术,还是艺术!Parent <p>Jom,你今年{age}岁了,要懂事啦!</p> <hr /> <Son></Son> </div>} </Consumer>) - 创建context.js 引入
- node的events模块的单例通信
- 资源管理器 (Redux|Mobx)
箭头函数的特点
- 箭头函数都是匿名函数
- 箭头函数不能作为构造函数
- 箭头函数不绑定arguments(就是不能传一堆参数被一个数据接收),取而代之用rest参数…(就是...rest)解决
- 箭头函数不能Generator函数,不能使用yeild关键字
一旦遇到 yield 表达式,生成器的代码将被暂停运行,直到生成器的 next() 方法被调用。每次调用生成器的 next() 方法时,生成器都会恢复执行,直到达到以下某个值
- 箭头函数不具有prototype原型对象
- 箭头函数不具有super
- 箭头函数不具有new.target
useState的原理
返回当前状态和设置状态的方法,每当状态改变之后,方法中会调用刷新视图的 render 方法。状态我们需要放在最外面,方便下次执行函数时可以重新取值。初始状态只会在函数第一次执行的时候赋值
多个useState需要同时使用,所以需要使用数据进行存储
let memoizedStates = []
let index = 0
function useState (initialState) {
memoizedStates[index] = memoizedStates[index] || initialState
let currentIndex = index
function setState (newState) {
memoizedStates[currentIndex] = newState
render()
}
return [memoizedStates[index++], setState]
}