User
とInvoice
の間で、StartApp
を使用しているときに、Elmアーキテクチャに従ってワークフローを分割しようとしています。Elmのコンポーネント間の通信
ユーザーには請求書がありますが、アクセスするにはログインする必要があります。
モデルでは、これらの線に沿って何かのように見えることがあります。
type Model
= NotLoggedIn Credentials
| LoggedIn RealName (Maybe Invoices)
type alias State =
{ login : Model
, notification : ......
, ......
type alias Invoices = { invoices: List Invoice, ...... }
ユーザーモジュールは、アクションを持っています
type Action
= Login (Result Http.Error String)
| Logout
| Submit
...
と更新機能:
update : Action -> Model -> (Model, Effects Action, Notification)
update action user =
case (action, user) of
(Login res, _) ->
case res of
Ok name ->
(LoggedIn name Nothing, Effects.none, Info "Welcome!")
...
私は詳細をスキップ認証の、それはすべて良いです。興味深い部分は、Login
アクションです。タプルがmain
にstep
機能に送信されます。
step : Action -> State -> (State, Effects Action)
step action state =
case action of
UserAction a ->
let (newstate, ef, n) = User.update a state.login
in ({ state | login = newstate, notification = n }, Effects.map UserAction ef)
InvoiceAction a -> ......
ので、ユーザがログインした次は、私たちはInvoice
モジュール内のいくつかのinit
アクションを呼び出したいです。
これはどのように正しく行われるべきですか?カプセル化を維持するためにInvoice
のアクションを開始するにはどうすればよいですか? Effects.none
以外のものを返さなければなりませんか?
貴重なご意見ありがとうございました。 – punund