{"pageContext":{"index":148,"total":366,"name":"2022-03-06","items":[{"node":{"frontmatter":{"title":"200行代码实现react俄罗斯方块Tetris","publish":true,"cover":"https://blog.ag-grid.com/content/images/2022/02/image-6.png","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://github.com/ceolter/tetris","author":"Niall Crosby","translator":"","tags":["react"],"priority":1},"html":"<p>文中展示了另外一种useInterval(更简明的)实现</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>useEffect<span class=\"token punctuation\">,</span> useRef<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">useInterval</span><span class=\"token punctuation\">(</span>callback<span class=\"token punctuation\">,</span> delay<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">const</span> callbackRef <span class=\"token operator\">=</span> <span class=\"token function\">useRef</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        callbackRef<span class=\"token punctuation\">.</span>current <span class=\"token operator\">=</span> callback<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>callback<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> interval <span class=\"token operator\">=</span> <span class=\"token function\">setInterval</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span> callbackRef<span class=\"token punctuation\">.</span><span class=\"token function\">current</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> delay<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span> <span class=\"token function\">clearInterval</span><span class=\"token punctuation\">(</span>interval<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>delay<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"397 字节大小的 Lambda演算引擎","publish":true,"cover":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMwAAABsAQAAAAAORWCxAAAABGdBTUEAALGPC/xhBQAAAAJiS0dEAAHdihOkAAAAB3RJTUUH5gIaFx00jhyb+AAAAJ9JREFUSMfFlUEOgDAIBPlB///L/QEqCrQxnOwil4ZME4aEUpHGgN7hZwT2o3/6Qm24Cf3ZF2rDz6i/L7w0AAY6Cw4ZdmYMDnKJ1EAabkZW1JAJyaNFQZg0poyDRDQ1IuegtbznDHQWDXQJeE5AquvgxPPgoGtQHgk2yuWFTmRCPUhrDQ6611cPyrXMQ76QG5DWGjwUn2gDyjsslB8oDx1PUMDer7ZqNQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMi0yNlQyMzoyOTo1MiswMDowMPZ3dYUAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDItMjZUMjM6Mjk6NTIrMDA6MDCHKs05AAAAAElFTkSuQmCC","showCover":true,"date":"2022-03-06","category":"lambda","url":"https://justine.lol/lambda/","author":"justine","translator":"","tags":["lambda"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"AWS 推出免费客户碳足迹工具","publish":true,"cover":"https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2022/02/21/cc_top_1.png","showCover":true,"date":"2022-03-06","category":"devops","url":"https://aws.amazon.com/cn/blogs/aws/new-customer-carbon-footprint-tool/","author":"Jeff Barr","translator":"","tags":["AWS"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"Grist - 电子表格和数据库的表格","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"nodejs","url":"https://github.com/gristlabs/grist-core","author":"Grist Labs","translator":"","tags":["spreadsheet"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"Reveal.js 一个 HTML 演示框架","publish":true,"cover":"https://camo.githubusercontent.com/5327c3e6d8349607bc84c60102bee78e7ee32d2b1861f28445560df9eeb79492/68747470733a2f2f68616b696d2d7374617469632e73332e616d617a6f6e6177732e636f6d2f72657665616c2d6a732f6c6f676f2f76312f72657665616c2d626c61636b2d746578742d737469636b65722e706e67","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://github.com/hakimel/reveal.js","author":"Hakim El Hattab","translator":"","tags":["presentation"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"Red Hat 和 IBM 的 Node.js 参考架构指南","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"nodejs","url":"https://github.com/nodeshift/nodejs-reference-architecture","author":"NodeShift by Red Hat","translator":"","tags":["discipline"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"SQLite 3.38.0支持json查询","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"database","url":"https://tirkarthi.github.io/programming/2022/02/26/sqlite-json-improvements.html","author":"Karthikeyan","translator":"","tags":["SQLite"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"css漫画","publish":true,"cover":"https://comicss.art/comics/14/14-accent-color-4.webp","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://comicss.art/","author":"ALVARO MONTORO","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"SingleFile - 网页转单个html文件","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"javscript","url":"https://github.com/gildas-lormeau/SingleFile","author":"Gildas","translator":"","tags":["html"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"Twitter使用Splunk Enterprise日志服务的经验","publish":true,"cover":"https://www.splunk.com/content/dam/splunk2/images/screenshots/platform-journey/conflaunch/SS-UI-Light-Mode-frame.png","showCover":true,"date":"2022-03-06","category":"devops","url":"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2021/logging-at-twitter-updated","author":"Kristopher Kirkland","translator":"","tags":["logging"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"matrix - 矩阵操作","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://github.com/hakimel/reveal.js","author":"ml.js","translator":"","tags":["matrix"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"hoppscotch - 开源postman替代","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"nodejs","url":"https://github.com/hoppscotch/hoppscotch","author":"Hoppscotch","translator":"","tags":["postman"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"react-scrollama -轻量级滚动监听组件","publish":true,"cover":"https://github.com/jsonkao/react-scrollama/raw/master/example/public/demo-sticky.gif","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://github.com/clintonwoo/hackernews-remix-react","author":"Jason Kao","translator":"","tags":["react"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"rc-select - 功能全面的select组件,antdesign团队支持","publish":true,"cover":"https://camo.githubusercontent.com/642dc86a2a83424579855f16d7887f4753d981dc89ef440ff7083633a2665140/68747470733a2f2f67772e616c697061796f626a656374732e636f6d2f7a6f732f616e7466696e63646e2f64313365555a6c67644a2f74757069616e2e706e67","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://github.com/react-component/select","author":"react-component","translator":"","tags":["select"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"hackernews-remix-react - 使用remix的hackernews克隆项目","publish":true,"cover":"https://github.com/clintonwoo/hackernews-remix-react/raw/main/docs/hn-screenshot-seal.webp","showCover":true,"date":"2022-03-06","category":"nodejs","url":"https://github.com/clintonwoo/hackernews-remix-react","author":"Clinton D Annolfo","translator":"","tags":["remix"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"obsidian - 对个人免费的markdown写作工具","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"tool","url":"https://obsidian.md/","author":"obsidian","translator":"","tags":["writting"],"priority":1},"html":"<ul>\n<li>支持git自动提交插件</li>\n<li>支持mac,linux,windows,ios,android</li>\n<li>对个人永久免费</li>\n<li>不需要注册账户</li>\n</ul>"}},{"node":{"frontmatter":{"title":"socket - npm依赖链安全检测工具","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"nodejs","url":"https://socket.dev/blog/introducing-socket","author":"Feross Aboukhadijeh","translator":"","tags":["npm"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"世界上唯一被设计为撕碎的旗帜","publish":true,"cover":"https://blogger.googleusercontent.com/img/a/AVvXsEim-v1Xy4eJfKTfQyjvJB4KOcmwK-01Rnp3xolRA1-XJlansAOqBIscK6YdntB2tz-s6VM_e1aJQP_54TKdiJpigKQ8SSelr_g8rSludoU81kjHhc60tsPn5OTQ3PAjSI_DDSowZG-CfoNqwPknVZBSrp1oSjFbg7iulMUA4Ekt0usWNKRsqH_PTM7s=w400-h321","showCover":true,"date":"2022-03-06","category":"other","url":"","author":"kobadoo","translator":"","tags":["flags"],"priority":1},"html":"<p>萨莫拉（ Zamora ）的旗帜，它是西班牙西北部靠近葡萄牙边境的一个美丽省份。</p>"}},{"node":{"frontmatter":{"title":"喜鹊通过互相帮助移除跟踪设备","publish":true,"cover":"https://live-production.wcms.abc-cdn.net.au/75f58b82118307ef6e535059e70f5b4c?src","showCover":true,"date":"2022-03-06","category":"nature","url":"https://www.abc.net.au/news/2022-02-22/magpies-show-cooperative-behaviour-by-removing-tracking-device/100851458","author":"Dominique Potvin","translator":"","tags":["magpie"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"一种有效的新方法来进行规模难以想象DDos攻击","publish":true,"cover":"https://cdn.arstechnica.net/wp-content/uploads/2022/03/middlebox-ddos-amplification.gif","showCover":true,"date":"2022-03-06","category":"security","url":"https://arstechnica.com/information-technology/2022/03/unending-data-floods-and-complete-resource-exhaustion-ddoses-get-meaner/","author":"DAN GOODIN","translator":"","tags":["DDOS"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"技术人员进入管理领域时放弃了什么","publish":true,"cover":"https://149351115.v2.pressablecdn.com/wp-content/uploads/2022/02/220222-Stack-Overflow-Engineering-Management-2048x1075.jpg","showCover":true,"date":"2022-03-06","category":"project","url":"https://stackoverflow.blog/2022/02/23/what-you-give-up-when-moving-into-engineering-management/","author":"Karl Hughes","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"检查第三方脚本安全性","publish":true,"cover":"https://css-irl.info/are-my-third-parties-green.webp","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://css-irl.info/are-my-third-parties-green/","author":"","translator":"","tags":["security"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"不需要javascript可以做到的5个效果","publish":true,"cover":"https://lexoral.com/assets/blog/you-dont-need-js/header.png","showCover":true,"date":"2022-03-06","category":"frontend","url":"https://lexoral.com/blog/you-dont-need-js/","author":"Steven Waterman","translator":"","tags":["css"],"priority":1},"html":"<ul>\n<li>svg动画</li>\n<li>css侧边栏(:hover)</li>\n<li>position: sticky</li>\n<li>details 实现手折叠内容</li>\n<li>:check伪类切换dark模式</li>\n</ul>"}},{"node":{"frontmatter":{"title":"英特尔通过收购 Linutronix 加大对 Linux 的投资","publish":true,"cover":"https://www.phoronix.com/assets/categories/intel.jpg","showCover":true,"date":"2022-03-06","category":"other","url":"https://www.phoronix.com/scan.php?page=news_item&px=Intel-Acquires-Linutronix","author":"Michael Larabel","translator":"","tags":["linux"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"解释Twitter 源代码的前 10 行","publish":true,"cover":"","showCover":true,"date":"2022-03-06","category":"nodejs","url":"https://css-tricks.com/explain-the-first-10-lines-of-twitter-source-code/","author":"Anand Chowdhary","translator":"","tags":["html"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"逐步发展您的 RESTful API","publish":true,"cover":"https://blog.frankel.ch/assets/resources/evolve-apis/api-gateway3.svg","showCover":true,"date":"2022-03-06","category":"nodejs","url":"https://blog.frankel.ch/evolve-apis/","author":"Nicolas Fränkel","translator":"","tags":["restful api"],"priority":1},"html":""}}]}}