Storybook: @ storybook / html 5.0.1 não pode executar scripts no carregamento da história, também conhecido como 'DOMContentLoaded' não ajuda mais

Criado em 15 mar. 2019  ·  6Comentários  ·  Fonte: storybookjs/storybook

Oi pessoal! Então, aqui está minha situação: alguns dos meus componentes requerem javascript. Posso chamar com sucesso o arquivo javascript em preview-head.html , mas inicializá-lo é um problema.

Antes da v5.0.1 eu costumava ter:

document.addEventListener("DOMContentLoaded", function(event) {
        /* The stuff I needed to initialise */
    }, false);

e funcionou, mas agora não funciona.

Estive olhando seus documentos e o próprio Stackoverflow, mas não consigo encontrar uma solução para isso. Parece que deveria ser algo que o Storybook deveria levar em consideração.

Qualquer ajuda seria apreciada.

core has workaround question / support

Comentários muito úteis

@ BennyZ28 qual foi a solução?

A solução alternativa é muito complexa. Por que o livro de histórias não fornece um retorno de chamada apenas chamado depois que a história é adicionada à árvore dom?

Todos 6 comentários

Esqueça, resolvido

@ BennyZ28 qual foi a solução?

@shilman Na verdade ainda não resolvi, já resolvi depois de muitas horas na frente da tela, mas me enganei.

Então, qualquer ajuda ainda será apreciada!

Sempre que a 'página' muda, o antigo div#root elemento dentro de iframe é removido e um novo é adicionado. Você pode usar este recurso e combiná-lo com MutationObserver para executar uma função cada vez que a página muda.

Dentro de seu preview-head.html , você pode adicionar:

function runOnInit() {
  console.log('Init')
}
function runOnPageChange() {
  console.log('Page has changed!')
}
document.addEventListener('DOMContentLoaded', function() {
  runOnInit();
  const callback = function(mutationsList) {
    for (let i = 0, len = mutationsList.length; i < len; i++) {
      if (mutationsList[i].type == 'childList') {
        runOnPageChange();
        break;
      }
    }
  };

  const observer = new MutationObserver(callback);
  const config = { childList: true, subtree: false };
  observer.observe(document.getElementById('root'), config);
}, false);

Para entender como MutationObserver funciona, consulte a documentação MDN .

🙏

@ BennyZ28 qual foi a solução?

A solução alternativa é muito complexa. Por que o livro de histórias não fornece um retorno de chamada apenas chamado depois que a história é adicionada à árvore dom?

Esta página foi útil?
0 / 5 - 0 avaliações