grapes.js中的init()和onRender()生命周期挂钩之间有何区别?

Grapesjs提供了两种生命周期方法:init()onRender(),实际上我对这两个钩子感到很困惑:

医生说:

  • 本地挂钩:view.init()方法,在初始化组件视图后执行
  • 本地挂钩:view.onRender()方法,在组件在画布上呈现后执行
init({ model }) {
  // Do something in view on model property change
  this.listenTo(model,'change:prop',this.handlePropChange);

  // If you attach listeners on outside objects remember to unbind
  // them in `removed` function in order to avoid memory leaks
  this.onDocClick = this.onDocClick.bind(this);
  document.addEventListener('click',this.onDocClick)
},// Do something with the content once the element is rendered.
// The DOM element is passed as `el` in the argument object,// but you can access it from any function via `this.el`
onRender({ el }) {
  const btn = document.createElement('button');
  btn.value = '+';
  // This is just an example,AVOID adding events on inner elements,// use `events` for these cases
  btn.addEventListener('click',() => {});
  el.appendChild(btn);
},

例如,我可以使用两种方法访问this.el来获取dom元素。如果我想在this.el上附加一个事件侦听器,哪种方法更适合执行此操作?

通常,这两种方法有什么区别?在什么情况下应该使用它们?

iCMS 回答:grapes.js中的init()和onRender()生命周期挂钩之间有何区别?

在执行挂钩之前需要DOM中的元素时,请使用onRender

示例:

var el = document.createElement('DIV');
el.style = 'height: 10px';

// logs 0
console.log(el.clientHeight);

document.body.appendChild(el);

// logs 10
console.log(el.clientHeight);

clientHeight返回DOM中元素的高度。如果元素不在DOM中,则它不会计算元素的高度。与HTML元素相关的许多属性和功能。

当您希望钩子在组件初始化时立即执行而无需等待渲染时,请使用init

这对设置事件侦听器很有帮助。如果您在onRender中设置了事件侦听器,则不会捕获在init之后且在onRender之前触发的所有事件。

如果无需在初始化组件时立即调用钩子中的代码,并且该代码不依赖于DOM中的元素,那么选择哪个实际上并不重要。在大多数情况下,这些事件之间的间隔为毫秒。

尽管我通常会倾向于init,所以该钩子会尽快执行,并且在渲染出现问题时不会等待。

本文链接:https://www.f2er.com/2277411.html

大家都在问