1.vue懒加载组件
2.扫描枪博客
3.hugo评论和友链
4.前端压缩文件上传,https://segmentfault.com/a/1190000010934481,https://www.zhihu.com/question/394204941
5.https://umijs.org/zh-CN/docs/ssr ssr框架 阿里
6.https://leetcode-cn.com/problems/hamming-distance/solution/yi-ming-ju-chi-by-leetcode/ 布莱恩算法
7.回溯法 https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-xiang-jie-by-labuladong-2/
了解了一下媒体查询+百分比实现自适应
bring up 培养
bring down 降低
配置了picgo,学到了一个linux指令which
最长回文字符串,学到一个expand的方法
复习了二叉树反转
学了一种函数式生成vue组件的方法
试着用了一下deepl作为翻译工具,就是右下角弹窗有点烦
noting
NOTHING
算法
求最大连续子数组乘积,0分割法,dp算法
删除倒数第N个节点
前端
算法
234,链表反转和中心拓展法,以及寻找链表中点,需要强化基础
解决了函数式组件没法用状态的痛点
const [text, setText] = useState('这是一句测试')
// 父组件
const AppContext = React.createContext({});
<AppContext.Provider value={{
username: 'superawesome'
}}>
<div className="App">
<Navbar/>
<Messages/>
</div>
</AppContext.Provider>
// 子组件
const {username} = useContext(AppContext)
useEffect()
用来引入具有副作用的操作,最常见的就是向服务器请求数据。以前,放在componentDidMount
里面的代码,现在可以放在useEffect()
。
- 第一个参数是函数用来执行异步操作
- 第二参数依赖项,如果变化则执行异步操作
useEffect(() => {
// Async Action
}, [dependencies])
// 接受类型T的参数,返回值为T类型
function identity<T>(arg: T): T {
return arg;
}
function compose(middleware) {
return function (context) {
// 从第一个中间件开始调用
return dispatch(0);
/**
* 调用指定 index 的中间件,为其传入 next 参数为下一个中间件的 dispatch
* @param {Number} i 中间件 index
* @return {Promise} resolve 后意味着上一个中间件 next() 后的代码可以继续执行
*/
function dispatch(i) {
// 当前中间件函数
let fn = middleware[i];
// 中间件都被调用后
if (i === middleware.length) {
return Promise.resolve();
}
try {
// 调用当前中间件,next 参数设置为下一个中间件的 dispatch
// 程序执行到 await next() 时进入下一个中间件调用
const ret = fn(context, dispatch.bind(null, i + 1));
// 将本次调用结果返回给上一个中间件,也就是 await next()
return Promise.resolve(ret);
} catch (ex) {
return Promise.reject(ex);
}
}
}
}
2020-11-16
看响应式原理