React维护者真任性,组件又能返回undefined了

1,423 阅读2分钟

本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

这篇文章废话比较多,时间紧张的看最后的总结就行了。

事情是这样的,早上因为来的晚,所以我现在还么到下班时间。下周又要讲React18,所以我就在这儿待着看github上React18的讨论区,为下周找点新鲜素材。(最近在写RN,有一周没关注React18了)

image-20210726190600530

然后,我就看到了排行第二的这条Update to allow components to render undefined,我就很诧异了,是不是我看错了,我记得以前React有一版专门说修复了组件返回undefined不报错的bug,怎么现在又让返回undefined了,是不是我看错了。于是我又点进来,

image-20210726191337120

看到红框这行字,我还是觉得不是很能相信,于是我打开我的react-ice项目,写了个组件:

image-20210726191538585

一测试,报错。

但是这个项目是我前段时间yarn add react@alpha react-dom@alpha装的React18Alpha,而这个文章是两天前写的,也就是我的包还不够新。于是我又重新执行了下yarn add react@alpha react-dom@alpha,重新跑下代码,果然,太平盛世,没有任何报错。

行吧。收到。

(如果不是为了写这篇文章或者是下周要讲React18,我都不想往下看背景介绍了,一句话解释“I changed my mind”,这么一大段背景,但是为了工作,我继续往下看了。)

背景也比较简单,React以前之所以返回undefined会报错,是为了帮助用户快速排错,因为用户可能会忘记返回组件,比如说下面这个例子:

function Animal({type}) {
  if (type === 'cat') {
    // 没返回,报错!
    // 这通常是程序员的失误
    <Cat />;
  }
​
  return;
}

这是当时2017年把组件返回undefined报错处理的原因,但是现在来看呢,今时不同往日了,现在的类型检测工具都非常流行并且可靠了,比如ts。所以现在React可以不再帮助用户排查忘记给组件添加返回值的情况了。

并且还有一点,这个改动和React18之后的特性也相关。比如Suspense,如果我不想要fallback所以才赋值undefined,但是React报错,这理论上有点矛盾。

还有这点改动对服务端也很重要,因为要接受来自服务端的children,返回undefined报错会增加复杂性,还是简单点吧。 好了,写个总结,我到下班点了。顺便参加下掘金的活动。

总结

React18的组件可以返回undefined代表空了,不会再报错了

最后,打个广告再走,欢迎关注我的b站,前端bubucuo,React18最新讲解视频持续更新中