2
親コンポーネントは、着信ポートの結果を子コンポーネントに渡すことは可能ですか?Elm:親アップデートポート経由の子コンポーネント
私はこの親/子コンポーネントの作成例(https://www.elm-tutorial.org/en/02-elm-arch/06-composing.html)を見てきました。これは素晴らしい例ですが、ポートを介して子供のモデルを更新したいと思います。これは可能ですか?
index.js
var num = 0;
setInterval(function() {
num = num + 1
app.ports.tick.send(num)
},1000);
Ports.elm
port module Ports exposing (..)
port tick : (Int -> msg) -> Sub msg
Main.elm(親)
import Widget
type Msg
= WidgetMsg Widget.Msg
update : Msg -> AppModel -> (AppModel, Cmd Msg)
update message model =
case message of
WidgetMsg subMsg ->
let
(updatedWidgetModel, widgetCmd) =
Widget.update subMsg model.widgetModel
in
({ model | widgetModel = updatedWidgetModel }, Cmd.map WidgetMsg widgetCmd)
subscriptions : AppModel -> Sub Msg
subscriptions model =
Ports.tick WidgetMsg
Widget.elm(子)
initialModel : Model
initialModel =
{ count = 0
, tickValue = 0
}
type Msg
= Increase
| Tick Int
update : Msg -> Model -> (Model, Cmd Msg)
update message model =
case message of
Increase ->
({ model | count = model.count + 1 }, Cmd.none)
Tick val ->
({model | tickValue = val}, Cmd.none)
だから、Widget.elmはこの「Tick」メッセージタイプをどうにか公開する必要がありますか? 次のエラーが表示されます。 '変数 'Widget.Msg.Tick'が見つかりません 66 | (WidgetMsg << Widget.Msg.Tick) ^^^^^^^ 修飾子 'Widget.Msg'は有効範囲にありません。 ' –
これはちょうど 'Widget.Tick'です。私は私の答えを更新しました –
ありがとうございます。これは私の問題を解決しました。私はWidget.Tickに直接アクセスできたことを知らなかった –