초보자가 Hyperapp에 대해 알아보기
17826 단어 hyperappJavaScriptTypeScript
개발 환경의 구축
앞머리가 모르는 사람(react의 책과 공식 강좌 1주일 정도)이기 때문에 어쨌든 쉽게 도입할 수 있는 방법을 선택했다.
# 作業フォルダの設定
PS> mkdir try-hyperapp
PS> cd try-hyperapp
# package.jsonの作成
PS> yarn init -y
# Hyperappのインストール
# babel-preset-envのインストール(環境に合わせてトランスパイルしてくれる?)
# parcelのインストール(設定ファイルのいらないモジュールバンドラー)
PS> yarn add hyperapp babel-preset-env parcel-bundler
최종package.json
은 다음과 같다.package.json
{
"name": "try-hyperapp",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"babel-preset-env": "^1.6.1",
"hyperapp": "^1.2.5",
"parcel-bundler": "^1.8.1"
},
※↓TypeScriptで書いたのでparcelでバンドルした際に自動で追加されたようです。
"devDependencies": {
"typescript": "^2.8.3"
}
}
Type Script로 쓰고 싶어서 만들었어요tsconfig.json
.tsconfig.json
{
"compilerOptions": {
"jsx": "react",
"jsxFactory": "h",
"sourceMap": true,
"strict": true
}
}
counter.tsx 만들기
먼저 루트 디렉토리 바로 아래에 폴더
src
를 만듭니다.만약 사실이라면
actions
폴더와views
폴더로 나누는 것이 좋을 수도 있지만, 이번에는 간단히src
모든 폴더를 정리counter.tsx
했다.src/counter.tsx
import { h, app, ActionsType, View } from "hyperapp";
interface IState {
count: number;
}
const state: IState = {
count: 0
};
interface IActions {
down: (value: number) => IState;
up: (value: number) => IState;
}
const actions: ActionsType<IState, IActions> = {
down: value => state => ({ count: state.count - value }),
up: value => state => ({ count: state.count + value })
};
const view: View<IState, IActions> = (state, actions) => (
<div class="card center-align">
<div class="card-image">
<h1>{state.count}</h1>
</div>
<div class="card-action">
<button
class="waves-effect waves-light btn-large"
onclick={() => actions.down(1)}
>
sub
</button>
<button
class="waves-effect waves-light btn-large"
onclick={() => actions.up(1)}
>
add
</button>
</div>
</div>
);
app<IState, IActions>(state, actions, view, document.body);
ActionsType
와View
TypeScript든 가져오지 않든 컴파일러에 화가 나지 않지만 고정된 유형은 실수로 오류와 보완을 줄여서 가져왔습니다.actions
형value
이 any
형으로 바뀌어서 불안해요.사용할 때 인터페이스처럼
number
형으로 추론되어 안심이 됩니다.Index.>의 제작
루트 디렉토리 바로 아래에 parcel이 되는 엔트리 포인트
Index.html
를 생성합니다.외로워 보이기 때문에 CDN
Materialize.css
을 거쳐 사용해야 한다.index.html
<!DOCTYPE html>
<html lang='ja'>
<head>
<meta charset='UTF-8'>
<title>try hyperapp</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
</head>
<body>
<script src='./src/counter.tsx'></script>
</body>
</html>
실행
다음 명령
dist
을 사용하여 폴더를 만들고 로컬 서버를 시작합니다.이번에는 타입 스크립트를 사용했지만 설치하지 않으면 자동으로 진행될 것 같습니다.
PS> yarn run parcel index.html
소감과 모르는 점.
좋은 곳
redux
등elm
구조는?react
보다 처음 편입된 인상이 더 좋았다.action
저도 주위의 깔끔한 곳을 좋아해요.모르다
react
의 Ducks 그래픽 같은 게 좋아요?src
.
|_ views
| |_ counter.tsx
| |_ foo.tsx
|_ states
| |_ counter.ts
| |_ foo.ts
|_ actions
|_ counter.ts
|_ foo.ts
actions
와 state
의 유형이 interface
이 좋은지 type
가 좋은지 모르겠어요.// interfaceで書く
interface IActions {
down: (value: number) => IState;
up: (value: number) => IState;
}
const actions: ActionsType<IState, IActions> = {
down: value => state => ({ count: state.count - value }),
up: value => state => ({ count: state.count + value })
};
// typeで書く
const actions: ActionsType<IState, IActions> = {
down: value => state => ({ count: state.count - value }),
up: value => state => ({ count: state.count + value })
};
type Actions = typeof actions;
sourcemap:ture
또는 크롬 개발자를 vscode로 확장하지만 안 됩니다Reference
이 문제에 관하여(초보자가 Hyperapp에 대해 알아보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Nossa/items/b33a1ac69a738e0750c8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)