react 有一套完善了 composition 构造模型,推荐使用 composition 代替 inheritance 来在 components 之间复用代码。下面介绍在开发的具体场景中常常需要用到 inheritance 的地方如何用 composition 解决。

containment 包含

一些 components 并不直接知道他们的 children 具体是什么。在 Sidebar 或 Dialog 中可以体现,它们只是一个 box 容器,他的内容可能是变化的。

阅读全文


大多数情况下,不同的 components 之间需要对同一个变化着的 data 进行响应。推荐将这些 shared state 共享的数据提升到它们最近的 parent component 中,下面详细介绍如何实现这一 function。

下面创建一个 temperature calculator 温度计算器来判断在一个给定的温度下,水是否会沸腾。

阅读全文


我在软路由上通过 esxi 安装了 openwrt 作为路由系统。虚拟机分配了 5 GB 作为存储空间,但是安装完成后通过命令查看发现系统识别到的空间只有很小:

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root               252.0M    241.4M      5.5M  98% /rom
tmpfs                   496.5M     68.0K    496.4M   0% /tmp
/dev/sda1                15.7M      3.8M     11.6M  25% /boot
/dev/sda1                15.7M      3.8M     11.6M  25% /boot
tmpfs                   512.0K         0    512.0K   0% /dev

其中 /dev/root 是系统固件目录,不用考虑。/dev/sda* 就是系统实际可用的硬盘空间。我明明分配了 5 GB 空间给 openwrt 但是由于系统分区是在下载的固件中定义好的,所以其余空间就没有被识别。由于默认存储空间过小,当安装了过多的插件后,会提示空间不足导致无法安装更多插件:

verify_pkg_installable: Only have 0kb available on filesystem /overlay, pkg luci-app-openvpn needs 9
opkg_install_cmd: Cannot install package luci-app-openvpn

下面介绍如何将剩余空间挂在到 openwrt 中。

阅读全文


我们在编程中经常会使用一些固定语句来解决对应固定的问题,在 shell 脚本中一个被经常使用但不太好理解的短句就是 2>&1,例如:

ls foo > /dev/null 2>&1

下面我们一步步了解下这种结构的含义。

阅读全文