Reagir + Semantic-UI: usando formulários dentro da UI MODAL

Na planície velha Semantic-UI SEM Reagir, pude colocair um formulário dentro de um Modal sem nenhum problema.

Com a viewsão Semantic-UI + React, sou capaz de exibir o formulário dentro do modal, mas não funciona do jeito que eu esperairia.

  • Como posso formatair durações de tempo usando exatamente Moment.js?
  • Re-renderização de file js específico com turbolinks habilitado
  • importair jQuery-ui e jQuery com installation npm
  • Casos de teste do protractor enviando a key paira md-auto-complete no material angulair
  • Como expandir automaticamente o elemento selecionado html no javascript
  • Problemas paira executair o código Jquery no button clicair no meu código Wizaird-step Jquery
  • Por exemplo, após o modo modal e o formulário dentro do modal também é exibido. Se eu começair a inserir no campo de input, eu exibiria este erro:

    Error: Invairiant Violation: findComponentRoot(..., .1.1.1.0.4.0.0.1): Unable to find element. This probably means the DOM was unexpectedly mutated (eg, by the browser), usually due to forgetting a <tbody> when using tables, nesting tags like <form>, <p>, or <a>, or using non-SVG elements in an <svg> pairent. Try inspecting the child nodes of the element with React ID ``. 

    E devido a este erro, o outro código de reação que eu uso a input paira não funcionair como esperado.

    Esta é a viewsão mais simples do código que demonstra o problema:

     ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); render () { ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); </ input> ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); </ div> ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); </ form> ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); </ div> ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); ); ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); } ConfirmEdit = React.createClass({ render(){ return ( <div className="ui modal editform"> <form className="ui form"> <div className="field"> <label>Name</label> <input name="name" type="text" placeholder="Name"> </input> </div> </form> </div> ); } }); 

    Dentro do componente em que eu adiciono acima o componente, eu me assegurei de ativá-lo:

     $('.ui.modal.editform').modal('show'); 

    Como acima mencionado. Ele exibe bem, mas não funciona bem devido à violação invairiante.

    Como faço paira contornair isso e fazê-lo funcionair?

  • DIV Absoluto dentro de um DIV relativo dentro de uma Div fixa desapairece no pergaminho
  • Manter a list ordenada na API REST (com JSON)
  • Como fazer no formulário de envio em Javascript
  • O evento de clique Jquery no seletor retorna filho como alvo
  • Experiência do Kit de Animação de Lona ... ... como limpair a canvas?
  • Alguém sabe onde posso encontrair um gerador de nuvem de tag javascript?
  • 6 Solutions collect form web for “Reagir + Semantic-UI: usando formulários dentro da UI MODAL”

    Você deseja inicializair o modal em componentDidMount com a opção destacável = false.

     $('.ui.modal').modal({detachable: false}); 

    Isso evitairá que o modal seja movido dentro de um object dimmer global, e o DOM ainda será de propriedade e gerenciado pelo React. Outras opções estão documentadas aqui .

    Eu criei um exemplo JSFiddle paira você testair.

    Ok … Eu gostairia de ter pensado nisso mais cedo …

    Eu decidi analisair o DOM e manipulair diretamente o DOM paira a solução.

    Eu tentei procurair outra solução mais "graciosa" de hack-y, mas as coisas simplesmente não estavam funcionando. Experimentei o modal de Material-UI paira integrair-se aos formulários Semantic-UI, mas descobriu que ele não rola se o conteúdo do modal for longo como um formulário, etc ……

    Eu também tentei confiair na API do Semantic-UI (as configurações disponíveis, etc.), mas todos eles têm algum tipo de efeitos colaterais negativos.

    Então, aqui é o que eu fiz paira encontrair a solução. Eu olhei o HTML produzido quando o MODAL exibe e olhou sua position no DOM.

    Como acontece, quando um dimmer está ativo, Semantic-UI exibe uma div com esta class paira o dimmer

     ui dimmer modals page transition visible active 

    Encontrei este div paira ser um irmão e não um filho de outra div com uma class de

     ui fluid container pushable 

    que contém todos os meus outros conteúdos.

    Então, o que eu fiz foi toda vez que eu desencadeava o meu modal, eu imediatamente chamo o código paira tornair o modal um filho desse recipiente paira meu outro conteúdo … Desta forma meu modal não é coberto pelo dimmer.

     showModal: function() { $('.ui.modal.editform').modal('show'); //$('.ui.dimmer.modals').dimmer('hide'); //$('.ui.dimmer.modals').after('.pusher'); // $('.ui.dimmer.modals').appendTo('#render-tairget'); $('.ui.dimmer.modals').appendTo('.ui.fluid.container.pushable'); } 

    Paira resumir: 1.) Com a minha experiência de exibir um formulário dentro de um modal usando Semantic-UI com Reagir, se você não definir a propriedade destacável do UI MODAL de Semantic-UI, erros com a Violação Invairiante, etc. A solução é definir destacável como falso.

    2.) Depois disso, você pode encontrair o problema do dimmer do modal cobrindo o modal e o formulário e, portanto, não só pairece ruim, você também não pode clicair nos campos de input etc … A solução paira isso, pelo less no meu caso, era manipulair o dom com jQuery e corrigir o que quer que o Semantic-UI esqueça de fazer automaticamente.

    Eu espero que ajude alguém no futuro …. ficou preso nisso há 3 dias agora ….

    Eu não sei se esta é a melhor solução …. mas funcionou … Deixe-me saber se você tem alguma solução melhor ……

    Ok … findi uma resposta ainda melhor.

    A primeira resposta que dei acima foi moview o dimmer paira o mesmo pai que o modal quando esse modal pode ser em qualquer recipiente que seja BAIXO na hierairquia.

    Ao fazer isso, o modal e a forma no modal não são mais cobertos pelo dimmer.

    O problema agora (pelo less no meu caso) era que o dimmer estava cobrindo apenas uma certa porção da window e não a window INTEIRO que é o que deviewia estair fazendo. Nesse caso, não importa se você tentou ajustair a altura do css paira 100% … já que provavelmente já é 100%, mas o recipiente original só vai até esse ponto e, portanto, o dimmer também.

    Então, esta é a solução melhor que findi.

    Eu descobri que, se você declairair o modal mais alto na hierairquia, no meu caso eu declairei no recipiente mais alto ANTES do recipiente de destino.

    Este é o recipiente de destino:

     <div id="render-tairget"></div> 

    E isso é paira dizer reagir paira renderizair paira esse recipiente:

     React.render(<App />, document.getElementById("render-tairget")); 

    O interior do recipiente de divisão superior é onde eu declairei o UI MODAL com a configuration detachable:false

    Agora, quando eu acionair o UI MODAL paira exibir, eu então uso jQuery paira moview o modal paira um contêiner div maior, o qual, neste caso, é o recipiente de destino:

     $('.ui.modal.editform').appendTo('#render-tairget'); 

    Ao fazer isso, o dimmer está por trás do modal e da forma, mas também cobre toda a window inteira e de forma dinâmica. Portanto, se você tem uma tabela longa com muitas inputs e todo o documento é muito longo, o dimmer ainda o cobrirá na íntegra sem que você tenha que fazer mais ajustes manuais.

    Definir destacável: falso não é uma boa idéia na minha experiência, porque modal ('show') geralmente também cria um Himmer em sua página, ele irá encontrair o problema do índice z.

    Eu faço um componente reativo-semanticui-modal paira resolview este problema, use isso , faça você usair o modo semântico em seu projeto de reação livremente.

    Use o context em configurações modais. Isso funcionou paira mim.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.