gpt4 book ai didi

elm - 从子组件更改全局状态

转载 作者:行者123 更新时间:2023-12-03 17:39:31 25 4
gpt4 key购买 nike

我想知道使用 TEA 从子组件修改全局状态的首选方法是什么。

我的用例有一个全局 loading indicator在任何 json 请求正在进行时显示。

谷歌搜索导致我 this article ,但不是 100% 这是最好的解决方案。还有其他建议吗?

多一点背景:

我有一个包含各种组件和“加载程序”组件的 SPA。加载器组件应该处理 View 之间的转换。

例如,假设我有 3 个 View :(A) 仪表板 (B) 帐户 (C) 交易详情。

当用户在 (A) 上并单击我想要 (A) 发送的事务时,通知加载程序它需要加载事务资源,并且完成后更新浏览器位置,以便根组件可以处理路由。

加载器在加载资源时应该在页面顶部显示一个加载栏。完成后,它将更新位置栏,以便根组件可以处理路由。

本质上,我试图避免的是在加载资源之前显示 (C) 页面。

最佳答案

像下面这样的结构有望帮助您前进。

更多关于 scaling Elm here (highly recommended)

在下面的示例中,您将所有数据以及消息都保存在顶级模型中。

这样的设置没有父子关系。所有 View 使用相同的顶级模型,并且所有 View 产生相同类型的消息。

此示例在交易进入后立即导航到交易页面。

type alias Model = 
{ accounts: List Account
, transactions: Transactions
, currentPage : Page
, message : String
}

type Transactions = Idle | Loading | GotEm (List Transaction)

type Page = DashboardPage | AccountsPage | TransactionsPage

type Msg = ShowDashboard | ShowAccounts | ShowTransactions | GotJSONData

update msg model =
case msg of
ShowTransactions ->
case model.transactions of
GotEm transactions ->
{ model
| currentPage = TransactionsPage
, message = ""
} ! []

Idle ->
{ model
| currentPage = DashboardPage
| transactions = Loading
, message = "Loading transactions"
} ! [ API.getTransactions model GotJSONData ]

Loading ->
model ! []

GotJSONData transactions ->
{ model
| transactions = GotEm transactions
, message = ""
, currentPage = TransactionsPage
}

view model =
case model.currentPage of
DashboardPage ->
DashboardPage.view model

-- DASHBOARD module

view model =
div []
[ ...
, button [ onClick ShowTransactions ] [ text "Show transactions"]
]

关于elm - 从子组件更改全局状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39719079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com