0.1.72 • Published 2 years ago

arkhi v0.1.72

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Arkhi.js - 基於島嶼架構的前端框架

「Arkhi」一詞源自群島(Archipelagos)語源「Arhki」(意味 Chief)和「pelagos」(意味 Sea)。我們利用島嶼架構的設計,協助開發者們規劃出一個個「互動性的小島」,輕鬆建立輕量、快速的網站。

Demo: (WIP)

安裝 Installation

npx create-arkhi@latest my-app

cd my-app

npm i # pnpm, yarn, bun 

Getting Started

建立島嶼

import { useState } from "react";
import { Island } from "arkhi/client";

const Counter = ({...props}) => {
	const [state, setState] = useState();
	return (
		<button onClick={()=>setState(state+1)} {...props}>
			{state}
		</button>
	);
}
const CounterIsland = Island(Counter);

export default function Page() {
	return (
		<>
			<div>
				靜態: <Counter /> 
			</div>
			<div>
				動態: <CounterIsland />
			</div>
		</>
	);
}

透過島嶼 HOC 包裹住,我們將範例中第二個 Counter 標記為島嶼,在客戶端載入時渲染。而第一個 Counter 因為沒有包裹住,所以在客戶端會保持靜態。

須注意一定要加上 {...props},Island 才能夠標記島嶼。

分享狀態

import { Share, useShare } from "arkhi/client";

export data = new Share<string>("init data");

export function Foo() {
	const share = useShare(data);
	return (
		<button onClick={() => data.data+=1 }>
			Click { share }
		</button>
	);
} 

由於在不同的島嶼之間無法共享狀態,我們使用 Share API 解決這個問題。useShare() 會在資料更新時自動提醒所有訂閱資料的島嶼重新選染,達到跨島嶼共享狀態。

島嶼架構

島嶼架構指的是在客戶端針對需要互動性的地方進行渲染,以降低載入時間與提高運作效率的設計。對比渲染整個頁面,在島嶼架構珠我們只會針對性的對需要互動性的部份進行 hydration,並且讓多數的界面保持靜止。

了解更多:Islands Architecture - patterns.dev

0.1.72

2 years ago

0.1.71

2 years ago

0.1.70

2 years ago

0.1.69

2 years ago

0.1.68

3 years ago

0.1.67

3 years ago

0.1.66

3 years ago

0.1.65

3 years ago

0.1.64

3 years ago

0.1.63

3 years ago

0.1.62

3 years ago

0.1.61

3 years ago

0.1.60

3 years ago

0.1.59

3 years ago

0.1.58

3 years ago

0.1.57

3 years ago

0.1.56

3 years ago

0.1.55

3 years ago

0.1.54

3 years ago

0.1.53

3 years ago

0.1.52

3 years ago

0.1.51

3 years ago

0.1.50

3 years ago

0.1.49

3 years ago

0.1.48

3 years ago

0.1.47

3 years ago

0.1.46

3 years ago

0.1.45

3 years ago

0.1.44

3 years ago

0.1.43

3 years ago

0.1.42

3 years ago

0.1.41

3 years ago

0.1.40

3 years ago

0.1.39

3 years ago

0.1.38

3 years ago

0.1.37

3 years ago

0.1.36

3 years ago

0.1.35

3 years ago

0.1.34

3 years ago

0.1.33

3 years ago

0.1.32

3 years ago

0.1.31

3 years ago

0.1.30

3 years ago

0.1.29

3 years ago

0.1.28

3 years ago

0.1.27

3 years ago

0.1.26

3 years ago

0.1.25

3 years ago

0.1.24

3 years ago

0.1.23

3 years ago

0.1.22

3 years ago

0.1.21

3 years ago

0.1.20

3 years ago

0.1.19

3 years ago

0.1.18

3 years ago

0.1.17

3 years ago

0.1.16

3 years ago

0.1.15

3 years ago

0.1.14

3 years ago

0.1.13

3 years ago

0.1.12

3 years ago

0.1.11

3 years ago

0.1.10

3 years ago

0.1.9

3 years ago

0.1.8

3 years ago

0.1.7

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago