Как было отмечено, это не работает, как есть из-за onload
, но может помочь кому-то еще ищет что-то подобное
Вы всегда можете вынести Реагировать компонент - пока вы получаете вокруг переписывать его;) - внутри узла Вязов. Трюк собирается его установить. Съемка с бедра: это было бы немного взломанным (и немного дорогим с Json.Encode.encode
и JSON.parse
, поскольку вам нужно получить данные из Вязов и в расходный JS-формат для компонента), но при условии, что у вас есть ThatComponent
, React
и ReactDOM
на window
объекта, который вы могли бы попробовать что-то вдоль линий
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 ] []
то, что вы будете иметь, хотя проблема с этим сохраняя свое состояние - которое, очевидно, плохо и работает против архитектуры Вязов (но вы, вероятно, знаете это и хотите повторно использовать что-то заранее построенное). Вы можете использовать порты для отправки данных обратно, но вы хотите обернуть это reactComponent
в Html.Lazy.lazy3
, чтобы он не перерегистрировал себя (поэтому вы отправляете как кодер, так и данные отдельно).
спасибо @ toastal - между анализом и советами Другого ответа, это звучит, как это может быть донкихотскими в лучшем случае - хотя использование гигантской экосистемы React - довольно заманчивый выигрыш. Может быть, я заберу вас, как только закончу учебники для новичков в Elm;) Но, скорее всего, я просто встряхню и сделаю перекомпоновку компонентов - возможно, большой опыт изучения. – Brandon
Я не считаю, что это работает, поскольку, по-видимому, div не поддерживает 'onload' https://stackoverflow.com/questions/22159476/simple-javascript-not-working-div-onload-alerthi –