PureScript 语言 Halogen 实现评分组件 星级高亮 + 点击选中

PureScript阿木 发布于 1 天前 3 次阅读


Halogen 星级评分组件实现:PureScript 语言下的交互式设计

在 Web 开发中,星级评分组件是一种常见的用户交互元素,用于收集用户对产品或服务的评价。PureScript 是一种函数式编程语言,它提供了强大的类型系统和简洁的语法,非常适合构建健壮且可维护的前端应用。本文将使用 PureScript 和 Halogen 库来实现一个具有星级高亮和点击选中的评分组件。

Halogen 是一个基于 PureScript 的声明式 UI 库,它允许开发者以声明式的方式构建响应式和可交互的用户界面。本文将介绍如何使用 Halogen 创建一个星级评分组件,该组件将支持鼠标悬停时星级高亮以及点击时选中特定星级。

准备工作

在开始之前,请确保您已经安装了 PureScript 和 Halogen。以下是一个简单的安装步骤:

1. 安装 PureScript:
bash
npm install -g purescript

2. 安装 Halogen:
bash
npm install purescript-halogen

星级评分组件设计

1. 组件结构

我们的星级评分组件将包含以下部分:

- 星级容器:用于放置所有星级的容器。
- 星级元素:单个可点击的星级元素。
- 星级值:表示当前选中的星级。

2. 组件状态

组件的状态将包括:

- `stars`: 星级数组,每个元素代表一个星级。
- `selectedStar`: 当前选中的星级索引。

3. 组件行为

组件的行为将包括:

- 鼠标悬停时高亮显示星级。
- 点击时更新 `selectedStar` 状态。

代码实现

以下是使用 Halogen 实现的星级评分组件的代码:

purescript
module RatingComponent where

import Halogen as H
import Halogen.HTML as HH
import Halogen.HTML.Properties as HP

-- 星级评分组件的类型定义
data Query a = SetStar Int a | Query a

-- 星级评分组件的状态
type State = { stars :: Array Int, selectedStar :: Int }

-- 初始化状态
initialState :: State
initialState = { stars: [1, 2, 3, 4, 5], selectedStar: 0 }

-- 星级评分组件的视图
view :: State -> H.ComponentHTML Query
view state =
HH.div
[ HP.className "rating-container" ]
(map (star -> HH.div
[ HP.className "star"
, HP.onmouseover $ Just (SetStar star)
, HP.onmousedown $ Just (SetStar star)
, HP.onmouseup $ Just (SetStar star)
, HP.onmouseleave $ Just (SetStar star)
, HP.className $ if star H.HalogenAction Query State
handleAction (SetStar star next) = do
H.modify_ (state -> { state | selectedStar = star })
pure next

-- 星级评分组件的初始化
component :: H.Component Query Unit State
component =
H.mkComponent
{ initialState
, render
, eval: H.mkEval $ H.defaultEval { handleAction = handleAction }
}

4. 样式定义

为了使星级评分组件更加美观,我们需要添加一些 CSS 样式:

css
.rating-container {
display: inline-block;
}

.star {
cursor: pointer;
font-size: 24px;
color: ccc;
margin-right: 5px;
}

.star-filled {
color: f00;
}

.star-empty {
color: ccc;
}

5. 使用组件

现在我们可以将评分组件嵌入到我们的应用中:

purescript
module Main where

import RatingComponent

main :: Effect Unit
main = do
H.runUI component unit

总结

本文介绍了如何使用 PureScript 和 Halogen 库实现一个具有星级高亮和点击选中的评分组件。通过声明式编程和类型安全,我们可以构建出既美观又健壮的 UI 组件。在实际应用中,可以根据需求扩展组件的功能,例如添加半星评分、动态评分等。

通过本文的学习,您应该能够理解如何使用 Halogen 创建交互式 UI 组件,并能够将其应用到您的 PureScript 项目中。