269 字
1 分钟
React 源码浅析之 - onlyChildren
这个模块的代码非常简单,短短十几行。
var ReactElement = require("ReactElement")
var invariant = require("fbjs/lib/invariant")
function onlyChild(children) {
invariant(
ReactElement.isValidElement(children),
"React.Children.only expected to receive a single React element child."
)
return children
}
module.exports = onlyChild
就是判断传入的 children 是不是一个合法的 React 元素,否则就抛错出来。判断的逻辑就在 ReactElement 模块里面:
ReactElement.isValidElement = function (object) {
return (
typeof object === "object" &&
object !== null &&
object.$$typeof === REACT_ELEMENT_TYPE
)
}
总结
那么到这里为止,所有 React 本身提供的 API 和模块就算是看完了。但是光看 React 本身的这些代码,其实并不能解决什么问题,比如 React Component 的生命周期是怎么实现的, setState 是怎么运作的,以及是如何把 React Component 渲染到浏览器中的,还有很多问题。 有机会我会继续寻找这些答案。
相关文章
- {% post_link react-source-code-analyze-1 React 源码浅析之 - 入口文件 %}
- {% post_link react-source-code-analyze-2 React 源码浅析之 - ReactBaseClasses %}
- {% post_link react-source-code-analyze-3 React 源码浅析之 - ReactChildren %}
- {% post_link react-source-code-analyze-4 React 源码浅析之 - ReactElement %}
- {% post_link react-source-code-analyze-5 React 源码浅析之 - onlyChildren %}
React 源码浅析之 - onlyChildren
https://blog.kisnows.com/2017/09/21/react-source-code-analyze-5/