dms
21
0016 是坑全踩
我又不懂网络,弄网络相关的就一脸懵逼。
浏览器能访问,我怎么想的到命令行无法访问,ping 都不通,查询 DNS 失败,就上次就因为这个错误卡了我半天儿。最后索性改了 hosts。
但开放的端口在局域网里没法访问,这个我知道,是防火墙。但是我也不会添加防火墙规则。一般都是程序提示,然后我放行,可是这次又不提示。为什么不提示呢,我很困惑。经高人提示,可能是我升级了 Node.js。我立刻否认,怎么可能,我这么懒……然后一看记录,真的升级过,秒打脸。后来卸载重装 Node.js 搞定。
全程一步一坑的。
dms
22
0017 这合理吗?
Hook 写起来简单直观,我很喜欢呀!
useEffect 里面放有副作用的操作,那计时器放里面没毛病。一切正常,好的,我学会了!我还设置了清除操作呢~
什么?出错??好着呢,计时器正常工作,各种功能一切正常,如此用了好几天了。
今天想加一个操作,然后也放在 useEffect 里,为了避免写错,写几句输出看一下……就看见一秒钟输出一次……难道说我的计时器一秒钟创建、清除一次。靠,这哪是一切正常啊,这是在承受范围内乱挥霍性能。
这正常么?我不造啊!问问去,果然不对劲儿。大佬们耐心教我,你得加上相关变量巴拉巴拉。
这一段好像……我觉得我以前看过所以没细看。不过这次的坑,是熟悉的味道,我十分确认,上一次用 react 的时候也掉进去过(不愧是我
useEffect 官方不建议多用,虽然我也用起来挺爽的。但是似乎不符合 react 的哲学。照 react 的哲学,上下级之间应该只通过prop来传递消息,dom 更新应该只通过 state 变更,不应在组件内部关心其他数据。
我理解的更新机制是一个浅复制 object,定时器判断是否相同,所以不属于根属性的变更(例如遍历出来的子对象)不会触发 dom 刷新。
dms
24
我在 useEffect 里面设定了一个定时器,来按时更新一个叫做 time 的 state。
这样就触发了组件更新,而组件更新又反过来触发 useEffect ,死循环达成!
所以要加入关注变量列表,但这样写着简单点,却真算不上优雅。如果用 componentDidMount
和 componentWillUnmount
就不会出现上面的尴尬。
一个为了简便而使问题变得复杂的典型例子。
dms
27
0018 真的很慢
慢吞吞。
我现在的重点就是不断地让代码合理化,依然围绕着最开始的几个组件在弄,让一切变得合理,符合我的预期,也符合 react 的设计理念(大概)。
我认为这是一个揣摩的过程。不断地区理解它的设计思路。
遇到了好多问题,主要集中在组件更新太频繁了。当然这个问题一般大概也不太会引起注意,我这不是有一个计时器全局驱动嘛,所以一旦频繁更新,会非常容易察觉到(输出的时候一秒一次)。
然后想明白了,组件是一个函数,但是这个函数主要负责显示内容和更新内容,我没必要把所有的计算流程都放进去。很多东西可以往外提,往上层提。这样整理之后即便频繁更新,造成的性能开销也不会很大,处于可以不去关心的范围内。
然后频繁更新的 state 和 props 尽可能用比较单纯的数据形式,让 react 自己去控制更新,这样即便在道理上是在每次变化时发生更新,但实际运算开销和传统方式应该差不多(我自己的理论推测)。
dms
28
0019 喵喵喵
和大佬们探讨一番,定时器不适合大范围传递,还不如多个定时器更好一些。
继续改。现在我一共写了三四个基础组件,就在不断调整他们之间的相互关系。
我觉得可以绑在全局变量上,在组件事件触发里需要的时候再去取。假如不是ui相关的不一定要和虚拟dom捆绑
dms
31
0020 重新开始
通过反复尝试,开始体味到了一些原则上的东西。于是现在要做的是根据自己理解的原则去整理前面写的几个组件。因为是很基础的思路发生了改变,所以基本有点重写的意思。
这也是我为什么一直没多写的原因,根基一变,全盘修改。
当然,写的慢是另外的问题。
dms
32
0021
终于开始有点理解了,能按着自己的想法支配了,虽然还很笨拙。整理过的部分代码精简掉了大概一半,逻辑也清晰通顺了,超开心!
最近感悟:学习就是不断去体会弄懂一件事儿的欣喜。
dms
33
0022 反反复复
遇到问题,研究问题,学习新知识,解决问题……一点都不可怕,甚至感到非常的开心。
可怕的是学习了一点新知识之后,发现前面很多东西可以用这个新知识进行优化,并且自己深度强迫症,不优化睡不好觉……
dms
34
0023
昨天完成了一个阶段的初期计划,然后计划好了今天的任务的,但是一觉醒来,忘了,呜呜,忘了
dms
35
0024 怎么可能那么顺利
编译以后放在目标设备上一看,嘿,白板。问题很简单,肯定是什么语法不被支持。这时候有小可爱就说了,Babel 啊,倒是没错,但是 Babel 对个别语法可能不做转换,所以用它来兼容旧设备有时候走不通。这也是为什么我为 kindle 弄得那些页面都是全手写的原因。
唉,不过一会儿试试吧
dms
36
0025 翻出一坑又一坑
学会了使用 polyfill,可以在目标设备上运行了,然而,目标设备不支持 grid 布局,呜呜
dms
37
0026 ?
当然,我成功的写出了回退方法。但是我陷入深深的自我怀疑,那我为什么还要用 Grid ……
dms
38
0027
对不对的咱不知道,但我自己的逻辑上基本相互契合的合理起来了。那就行吧,还能上来就整出一套大师级的代码么,能跑就行呗,何况我这蘑菇半天(这么多天),怎么也比能跑多进了几步,就行吧,可以往下一个阶段发展了。
dms
40
0028
跨域,行,我弄个服务中转一下。
结果今天仔细一看,后面的需要带 cookies,这就有点难为人了。
而且多个站,分别带不同的 cookies……