としては、これは動作しません指摘のように、ある理由onload
のが、あなたは常にコンポーネントに反応レンダリングすることができ
似た何かを探して他の誰かを助けるかもしれない - 'ゴマあなたが得ますそれを書き換えようとしています;) - Elmノードの内部。トリックはそれをマウントするつもりです。ヒップからの撮影:これはちょっとハッキリです(ちなみに、Elmからデータを取得してコンポーネントの消耗品JS形式にしなければならないので、ちょっと高価です(Json.Encode.encode
とJSON.parse
)。ThatComponent
、React
あなたはそれが自身の状態を維持するとの問題ですが、あなたが持っているだろう何
import Html exposing (Html, div)
import Html.Attributes as Attr exposing (attribute)
import Json.Encode as Encode exposing (Value)
reactComponent : String -> (a -> Value) -> a -> Html msg
reactComponent componentName encoder data =
let
jsonProps : String
jsonProps =
Encode.encode 0 <| encoder data
-- a script to load the React component on `this` which is
-- the `div` element in this case.
onLoad : String
onLoad =
String.join ""
[ "javascript:"
, "window.ReactDOM.render("
, "window.React.createElement(window[\""
, componentName
, "\"], JSON.parse("
, jsonProps
, ")), this)"
]
in
div [ attribute "onload" onLoad ] []
の線に沿って何かを試みることができるwindow
オブジェクト上、およびReactDOM
- 明らかに悪いですし、エルムアーキテクチャに対して実行されます(ただし、おそらくそれを知っていて、あらかじめ構築されたものを再利用したいと思っています)。あなたはポートを使ってデータを送り返すことができますが、reactComponent
をHtml.Lazy.lazy3
にラップして再レンダリングしないようにしたいと思います(エンコーダとデータを別々に送信する理由です)。
おかげのように見えます
に動作します - これは最高の状態で非現実的であるかもしれないようなあなたの分析&他の回答者のアドバイスの間で、それが聞こえます - 巨大なリアクトエコシステムを利用することは、非常に魅力的な結果です。私がElmの初心者のチュートリアルを終えたら、私はあなたを連れて行くだろう;)しかし、おそらく私はちょうどそれを吸い上げて、いくつかのコンポーネントを書き直すでしょう - おそらく偉大な学習の経験です。 – Brandon
明らかにdivが 'onload'をサポートしていないので、これはうまくいくとは思いませんhttps://stackoverflow.com/questions/22159476/simple-javascript-not-working-div-onload-alerthi –