PureScript 语言前端开发基础案例:Preact/Halogen 入门指南
PureScript 是一种函数式编程语言,它基于 Haskell,旨在提供一种简洁、高效且易于维护的编程方式。在前端开发领域,PureScript 结合了 Preact 和 Halogen 等库,可以构建出高性能、响应式的应用程序。本文将围绕 PureScript 语言,结合 Preact 和 Halogen,提供一个基础案例,帮助读者入门 PureScript 前端开发。
环境搭建
在开始之前,我们需要搭建一个 PureScript 开发环境。以下是步骤:
1. 安装 Node.js 和 npm:从 [Node.js 官网](https://nodejs.org/) 下载并安装 Node.js,它自带 npm 包管理器。
2. 安装 PureScript:在命令行中运行以下命令安装 PureScript:
bash
npm install -g purescript
3. 安装 Preact 和 Halogen:创建一个新的项目目录,并在其中运行以下命令安装 Preact 和 Halogen:
bash
npm install preact halogen
创建项目结构
接下来,我们需要创建一个项目结构。以下是一个简单的项目结构示例:
my-purescript-app/
├── src/
│ ├── Main.purs
│ ├── Components/
│ │ ├── App.purs
│ │ └── Counter.purs
│ └── styles/
│ └── main.purs
├── package.json
└── README.md
编写代码
1. 创建 `Main.purs`
`Main.purs` 是项目的入口文件,它负责启动应用程序。以下是 `Main.purs` 的内容:
purs
module Main where
import Preact as P
import PreactDOM as PDOM
import Halogen as H
import Halogen.HTML as HH
import Halogen.HTML.Properties as HP
import Data.Maybe (Maybe)
import Effect (Effect)
import Effect.Aff (Aff)
import Effect.Class (liftEffect)
import Effect.Console (log)
-- 定义应用程序的状态
type State = { count :: Int }
-- 初始化状态
initialState :: State
initialState = { count: 0 }
-- 处理点击事件的函数
incrementCount :: State -> State
incrementCount state = state { count = state.count + 1 }
-- 渲染组件
render :: State -> P.HTML_
render state =
HH.div_
[ HH.h1_ [ HH.text "计数器" ]
, HH.button
[ HP.onClick _ -> liftEffect $ log "Clicked!"
]
[ HH.text "点击我" ]
, HH.div_ [ HH.text $ show state.count ]
]
-- 主函数
main :: Effect Unit
main = do
-- 初始化 Halogen 应用程序
app case action of
H.Init -> Just (incrementCount state)
H.Action _ -> Just (incrementCount state)
)
}
-- 将应用程序渲染到 DOM 中
PDOM.render (render app.state) "app"
2. 创建 `Components/App.purs`
`App.purs` 是应用程序的根组件。以下是 `App.purs` 的内容:
purs
module Components.App where
import Preact as P
import PreactDOM as PDOM
import Halogen as H
import Halogen.HTML as HH
import Halogen.HTML.Properties as HP
import Data.Maybe (Maybe)
import Effect (Effect)
import Effect.Class (liftEffect)
import Effect.Console (log)
-- 定义应用程序的状态
type State = { count :: Int }
-- 初始化状态
initialState :: State
initialState = { count: 0 }
-- 处理点击事件的函数
incrementCount :: State -> State
incrementCount state = state { count = state.count + 1 }
-- 渲染组件
render :: State -> P.HTML_
render state =
HH.div_
[ HH.h1_ [ HH.text "计数器" ]
, HH.button
[ HP.onClick _ -> liftEffect $ log "Clicked!"
]
[ HH.text "点击我" ]
, HH.div_ [ HH.text $ show state.count ]
]
-- 主函数
main :: Effect Unit
main = do
-- 初始化 Halogen 应用程序
app case action of
H.Init -> Just (incrementCount state)
H.Action _ -> Just (incrementCount state)
)
}
-- 将应用程序渲染到 DOM 中
PDOM.render (render app.state) "app"
3. 创建 `Components/Counter.purs`
`Counter.purs` 是一个简单的计数器组件。以下是 `Counter.purs` 的内容:
purs
module Components.Counter where
import Preact as P
import PreactDOM as PDOM
import Halogen as H
import Halogen.HTML as HH
import Halogen.HTML.Properties as HP
import Data.Maybe (Maybe)
import Effect (Effect)
import Effect.Class (liftEffect)
import Effect.Console (log)
-- 定义计数器的状态
type State = { count :: Int }
-- 初始化状态
initialState :: State
initialState = { count: 0 }
-- 处理点击事件的函数
incrementCount :: State -> State
incrementCount state = state { count = state.count + 1 }
-- 渲染组件
render :: State -> P.HTML_
render state =
HH.div_
[ HH.h1_ [ HH.text "计数器" ]
, HH.button
[ HP.onClick _ -> liftEffect $ log "Clicked!"
]
[ HH.text "点击我" ]
, HH.div_ [ HH.text $ show state.count ]
]
-- 主函数
main :: Effect Unit
main = do
-- 初始化 Halogen 应用程序
app case action of
H.Init -> Just (incrementCount state)
H.Action _ -> Just (incrementCount state)
)
}
-- 将应用程序渲染到 DOM 中
PDOM.render (render app.state) "app"
4. 创建 `styles/main.purs`
`main.purs` 是应用程序的样式文件。以下是 `main.purs` 的内容:
purs
module styles.main where
import Halogen.HTML as HH
-- 定义样式
style :: HH.CSS
style =
HH.style_
[ HH.text "body { font-family: sans-serif; }"
, HH.text "h1 { color: 333; }"
, HH.text "button { padding: 10px 20px; background-color: 007bff; color: white; border: none; border-radius: 5px; cursor: pointer; }"
, HH.text "button:hover { background-color: 0056b3; }"
]
总结
通过以上步骤,我们创建了一个简单的计数器应用程序,使用了 PureScript、Preact 和 Halogen。这个案例展示了如何使用 PureScript 进行前端开发,并介绍了 Preact 和 Halogen 的基本用法。希望这篇文章能帮助你入门 PureScript 前端开发。随着你对 PureScript 的深入了解,你可以尝试构建更复杂的应用程序,并探索更多高级功能。
Comments NOTHING