Componentes
Nesta página é possível acessar a documentação dos componentes de uso global da WebSDk. A página será atualizada conforme modificações forem feitas.
A estrutura típica de um componente é próxima do exemplo abaixo:
// import the styles, the html template and custom components
import './page.scss'
import template from './page.html'
import MyComponent from '../../components/my-component'
export default {
template,
components: {
MyComponent
// declaração dos componentes customizados que estão sendo utilizados no *.html
},
props: {
// propriedades padrão do componente. Podem ser injetadas através da instância do componente.
myProp: 1,
myOtherProp: 'other'
},
state () {
return {
// variáveis de estado inicial do componente
stateVariable: 15,
otherStateVariable: true
}
},
onCreate () {
// callback executada quando o elemento HTML do componente está pronto pra uso
},
onUpdate() {
// callback executada quando o estado do componente precisa ser atualizado
// use esta callback para atualizar o DOM
},
onDestroy() {
// callback executada antes de o componente ser destruído
},
onMount() {
// callback executada antes de o componente aparecer na tela
},
onUnmount() {
// callback executada antes de o componente ser removido da tela
},
methods: {
// métodos do componente. Serão injetados na instância do componente.
myMethod () {
console.log('esse método é público e faz parte da API do componente')
}
}
}
API
props
Define as propriedades do componente. Desta forma, ao utilizar um componente, é possível configurá-lo
e.g.
Em my-component.js
{
props: {
myProp: '1'
},
onUpdate() {
// Você pode acessar os props diretamente do componente
console.log(this.myProp)
}
}
No HTML de outro componente
<div class="my-other-component">
<!-- Inicializa o prop da instância como 50 -->
<my-component my-prop="50"></my-component>
<!-- Inicializa o prop da instância como 9 -->
<my-component my-prop="9"></my-component>
<!-- Inicializa o prop da instância com seu valor padrão-->
<my-component></my-component>
</div>
state
Define o estado do componente. Note que state
é uma função que retorna um objeto. Desta forma, cada instância
de um componente irá executar esta função para obter um novo estado
e.g.
Em my-component.js
{
state () {
return {
stateVariable: 15,
otherStateVariable: true
}
},
onUpdate() {
// Você pode acessar o state diretamente do componente
console.log(this.stateVariable)
console.log(this.otherStateVariable)
}
}
methods
Define os métodos que o componente gostaria de expor para outros componentes
e.g.
Em my-component.js
{
methods: {
printSomething () {
console.log('something')
},
changeTitle (title) {
this.update({
myComponentTitle: title
})
},
changeSubtitle (subtitle) {
this.subtitle = subtitle
this.update()
}
}
}
Em my-other-component.js
onCreate () {
this.$refs['my-component'].changeTitle('Meu título')
this.$refs['my-component'].changeSubtitle('Meu subtítulo')
this.$refs['my-component'].printSomething()
}
name
O nome do componente. Essa propriedade é definida quando um componente é cadastrado
e.g.
<div class="my-component">
<my-componente-name ref="my-ref"></my-componente-name>
</div>
import MyComponent from '../../components/my-component.js'
{
components: {
MyComponentName: MyComponent // Será usado no HTML como my-component-name
},
methods: {
printName () {
console.log(this.$refs['my-ref'].name) // my-component-name
}
}
}
el
Guarda uma referência para o elemento HTML associado ao componente
e.g.
onCreate () {
console.log(this.el) // HTMLElement
}
parent
Guarda uma referência para o componente pai
e.g.
onCreate () {
console.log(this.parent) // Irá imprimir a instância do componente pai
}
children
Uma lista com uma referência para todos os componentes filhos
e.g.
onCreate () {
console.log(this.children) // Irá imprimir uma lista contendo todas as instâncias dos componentes filhos
}
Métodos
mount(root: HTMLElement)
Monta o componente em um elemento HTML e muda a propriedade display
do estilo do componente para torná-lo visível
e.g.
myComponent.mount(document.body)
unmount()
Desmonta o componente.
Atualmente, ao chamar o método unmount
, somente a propriedade display
é alterada para none
. O parentElement
do componente continua o mesmo
e.g.
myComponent.unmount()
update(props)
Atualiza o estado e os props do componente
e.g.
myComponent.update({
prop1: 'novo valor',
stateVar: 'novo estado'
})
console.log(myComponent.prop1) // 'novo valor'
console.log(myComponent.stateVar) // 'novo estado'
destroy()
Destroy um componente e todos os seus componentes filhos
e.g.
myComponent.destroy()
findChildren(componentName: string): Component[]
Retorna uma lista com todos os componentes filhos cujo o nome equivale ao componentName
import MyComponent from '../../components/my-component.js'
{
components: {
MyComponentName: MyComponent // Será usado no HTML como my-component-name
},
methods: {
printChildren () {
console.log(this.findChildren('my-component-name'))
}
}
}
Hooks
onCreate
Chamado somente uma vez, assim que um componente é criado.
onUpdate
Chamado sempre que o componente precisa ser atualizado. Logo após o onCreate ser chamado, o onUpdate será chamado logo em seguida
Use esta callback para atualizar o DOM
e.g.
{
props: {
text: 'Clique aqui'
},
onUpdate () {
// Atualiza o botão com o texto correto
this.$refs['button'].innerText = this.text
},
methods: {
setText (text) {
this.update({ text })
}
}
}
onMount
Chamado quando o elemento é adicionado ao DOM.
Note que na versão atual do framework, o método onMount
só é chamado no componente ao qual
o método mount
é chamado; ou seja, os componentes filhos uma vez montados, não mudam seu estado. O mesmo se aplica para onUnmount
onUnmount
Chamado quando o elemento é removido do DOM
onDestroy
Chamado quando um componente é destruído. Atualmente, nunca é chamado pelo framework
Atributos especiais
ref
Um objeto contendo todas as referências apontadas no HTML
Caso um atributo ref seja aplicado a um componente, a referência será a instância do componente, caso contrário, a referência irá apontar para o HTMLElement
correspondente. A referência é acessada através da propriedade $refs
do componente
e.g.
No HTML do componente
<div class="my-component">
<span ref="title"></span>
<my-other-component ref="other-component"></my-other-component>
</div>
No JS do componente
{
props: {
title: 'My Default Title'
},
onUpdate () {
// HTMLElement
this.$refs['title'].innerText = this.title
// Instância do componente
this.$refs['other-component'].anyMethod()
}
}
Tags Especiais
slot
Tag responsável por injetar código HTML dentro de um componente
e.g.
Componente 1
<div class="my-component-1">
<span>Isso não será substituído</span>
<slot>
<span>Isso será substituído se um slot for provido </span>
</slot>
</div>
Componente 2
<div class="my-component-2">
<span>Esse é meu componente 2</span>
<my-component-1>
<button>Clique aqui</button>
</my-component-1>
</div>
Irá resultar em
<div class="my-component-2">
<span>Esse é meu componente 2</span>
<div class="my-component-1">
<span>Isso não será substituído</span>
<button>Clique aqui</button>
</div>
</div>