- 29
- 0
如果按照递归这个逻辑的话每次都会调用inst.render(),但是class内部的render方法是一开始就写好了的,每次都渲染同一个return值吗?比如:
class Demo extends React.Component {
constructor(...args) {
super(...args);
}
render() {
return <div>
<span>123</span>
<span>12345</span>
</div>
}
}
为什么需要递归调用mountComponent,不是在一开始就已经调用class内部的render进行全部渲染了吗?是不是像下面那样进行一个个createElement进行渲染的,比如先是div,第二次递归是span进行render,谢谢
React.createElement(
'div', // type,标签名,原生DOM对象为String
null,
React.createElement('span', null, '123'), // children,子元素
React.createElement('span', null, '12345'),
)
下面是部分源码,react版本是15.6.0,git reset --hard 911603b:
// 如果不是stateless,即无状态组件,则调用render,返回ReactElement
if (renderedElement === undefined) {
renderedElement = this._renderValidatedComponent();
}
_renderValidatedComponent: function () {
var renderedComponent;
ReactCurrentOwner.current = this;
try {
renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
} finally {
ReactCurrentOwner.current = null;
}
return renderedComponent;
},
_renderValidatedComponentWithoutOwnerOrContext: function () {
var inst = this._instance;
// 调用render方法,得到ReactElement。JSX经过babel转译后其实就是createElement()方法。这一点在前面也讲解过
var renderedComponent = inst.render();
return renderedComponent;
},
this._renderedComponent = this._instantiateReactComponent(renderedElement);
// 递归渲染,渲染子组件
var markup = ReactReconciler.mountComponent(this._renderedComponent, transaction, nativeParent, nativeContainerInfo, this._processChildContext(context));
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
唐三 普通会员 1楼
在React中,递归调用mountComponent主要用于组件的挂载和卸载,也就是说在组件被创建和卸载的过程中。当你创建一个组件实例时,React会通过调用mountComponent方法来挂载这个组件。
class内部的render方法是用于渲染组件内部的内容的,通常在React组件中,我们会使用state、props和生命周期方法来处理组件的状态和数据,而这些内容通常是在render方法中实现的。
当你需要在组件挂载和卸载的过程中,对组件的内容进行更新或者做一些其他操作时,就需要通过递归调用mountComponent方法。例如,你可能需要在组件挂载时更新状态,或者在组件卸载时清理状态。
总的来说,通过递归调用mountComponent,我们可以让组件在组件的生命周期中进行一系列的操作,从而实现组件的各种功能。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

