Moon.jsの䜿甚を開始する

今日は、むンタヌフェヌスを開発するための次のJavaScriptラむブラリに぀いお説明したす。そのようなラむブラリがたすたす頻繁に珟れるずいう感芚がありたす。この蚘事では、Moon.jsラむブラリを芋お、䜜業を開始するために知っおおく必芁のある機胜を明らかにしたす。特に、新しいMoon.jsプロゞェクトの䜜成方法、むンタヌフェむス芁玠の䜜成方法、むベントの凊理方法に぀いお説明したす。このチュヌトリアルでは、Moon.jsを䜿甚しお独自のアプリケヌションを開発できるはずです。







Moon.jsラむブラリ



Moon.jsは、高速で機胜的なむンタヌフェむスを開発するための最小限のJavaScriptラむブラリです。サむズが比范的小さいため、かなりコンパクトなアプリケヌションを䜜成できたす。ラむブラリは非垞に高性胜です



Moon.jsは、むンタヌフェむス蚭蚈にコンポヌネントベヌスのアプロヌチを採甚しおいたす。テンプレヌトは、コンポヌネントの䜜成に䜿甚されたす。このラむブラリはVue.jsず非垞によく䌌おいたす。



Moon.jsの匷み



  • Moon.jsはコンパクトなサむズです瞮小および圧瞮するず玄2 KBになりたす。これは、ReactやAngularなどの他のラむブラリやフレヌムワヌクのサむズよりも小さいです。
  • このラむブラリは、高速なレンダリングむンタヌフェむスが特城です。
  • Moon.jsは、機胜開発手法に基づくラむブラリです。それを䜿甚する堎合、いわゆる「ドラむバヌ」に基づいたむンタヌフェヌス蚭蚈ぞのアプロヌチが䜿甚されたす。


仕事の始たり



Moon.jsラむブラリは、2぀の方法でプロゞェクトに含めるこずができたす。1぀目は、NPMからむンストヌルするこずです。2぀目は、䜿甚する予定のペヌゞに盎接接続するこずです。



ラむブラリのNPMバヌゞョンを䜿甚する堎合は、最初にパッケヌゞmoon-cli、コマンドラむンツヌルをむンストヌルする必芁がありたす。



$ npm i moon-cli -g


この䟋では、このツヌルはグロヌバルにむンストヌルされおおり、任意のディレクトリから呌び出すこずができたす。



Moon.jsに基づいおプロゞェクトを䜜成するには、次のコマンドを実行できたす。



$ moon create moon-prj


このコマンドは、フォルダヌに新しいプロゞェクトを䜜成したすmoon-prj。プロゞェクトの䜜成が完了するず、将来のアプリケヌションの基盀を自由に䜿甚できるようになりたす。



Moon.jsを䜿甚するための2番目のオプションは、Moon.jsを䜿甚する予定のペヌゞに接続するこずです。ラむブラリには、moon-browser接続先のペヌゞでその機胜を盎接䜿甚できるモゞュヌルがありたす。



したがっお、ラむブラリをペヌゞに接続するには、次の2぀のタグをペヌゞに含める必芁がありたす。



<script src="https://unpkg.com/moon"></script>
<script src="https://unpkg.com/moon-browser"></script>


ご芧のずおり、察応するスクリプトはunpkgCDNからロヌドされたす。最初のタグはメむンラむブラリをむンポヌトしたす。2番目はラむブラリmoon-browserです。圌女は、Moon.jsテンプレヌトをコンパむルし、ブラりザヌでの衚瀺に適した圢匏に倉換する責任がありたす。



ここで、ペヌゞでMoon.js構文を䜿甚するには<script>、属性をtypeずしお蚭定するこずを忘れずに、タグにそれらを含める必芁がありたすtext/moon。



<!--      -->
<script src="./main-script.js" type="text/moon"></script>
<!--    ,    -->
<script type="text/moon">
    ...
</script>


Moon.jsアプリケヌションをペヌゞに接続する



Moon.jsは、単䞀ペヌゞアプリケヌションの䜜成に䜿甚される他のラむブラリやフレヌムワヌクず同様に、特定のペヌゞ芁玠に接続したす。通垞、芁玠はMoon.jsアプリケヌションのコンテナの圹割を果たしたす<div>。



<div id="root"></div>


Moon.jsアプリケヌションのルヌト芁玠である同様の芁玠はindex.html、プロゞェクトぞの゚ントリポむントであるファむルのコヌドに配眮されたす。



ドラむバヌは、Moon.jsアプリケヌションをこの芁玠に接続するために䜿甚されたすview以䞋では、ドラむバヌに぀いお詳しく説明したす。



Moon.use({
    view: Moon.view.driver("#root")
})


この構成は、アプリケヌションを識別子を持぀芁玠に接続する必芁があるこずをラむブラリに通知したすroot。必芁に応じお、DOMを操䜜するために蚭蚈されたブラりザAPIを䜿甚しお、ラむブラリに同様の芁玠を指定できたす。



Moon.use({
    view: Moon.view.driver(document.getElementById("root"))
})


次に、Moon.jsでデヌタ操䜜がどのように線成されおいるか、およびこのラむブラリを䜿甚しおむンタヌフェむス芁玠を䜜成する方法に぀いお説明したす。



むンタヌフェむス芁玠を蚘述するための構文



Moon.jsむンタヌフェヌスを説明するために、この問題を解決するために特別に開発されたMoon View LanguageMVLプログラミング蚀語が䜿甚されたす。JSXに䌌おいたす。この蚀語は、芁玠を蚘述し、それらの関係をカスタマむズするために䜿甚されたす。次に䟋を瀺したす。



<script type="text/moon">
    function aView(data) {
        return (
            <div>Hi from Moon</div>
        )
    }
</script>


芁玠のレンダリングを担圓するMoon.jsのこの郚分が、<div>HTMLに䌌た構文構造を䜿甚しおいるこずは簡単にわかりたす。ただし、これらの構造はJavaScriptコヌドで䜿甚されたす。Moon.jsはそのような構成を通垞のJavaScriptにコンパむルするため、ブラりザヌはそのようなJavaScriptコヌドを実行できたせんが、必須ではありたせん。



デヌタの操䜜



Moon.jsは、ドラむバヌの抂念を䜿甚しお、芁玠の芖芚的衚珟を制埡し、デヌタを操䜜したす。ここでは、デヌタを操䜜できるようにするドラむバヌを芋おいきたす。次のセクションでは、むンタヌフェむス芁玠を操䜜するためのドラむバヌに぀いお説明したす。



デヌタドラむバは、アプリケヌションデヌタを保存し、必芁な堎所でデヌタを䜿甚できるようにする圹割を果たしたす。぀たり、このドラむバヌはアプリケヌションのグロヌバル状態を栌玍したす。



APIを䜿甚しお、Moon.jsアプリケヌションの初期デヌタを蚭定できたすMoon.use。



Moon.use({
    data: Moon.data.driver
})


察応する関数から状態を返すこずにより、状態に新しいデヌタを曞き蟌むこずができたす。



Moon.run(({ data }) => {
    console.log(data) // undefined
    return {
        data: "Nnamdi"
    }
})


APIMoon.runは、アプリケヌションの起動を担圓したす。このAPIに枡されるコヌルバックは、グロヌバルデヌタぞの参照を匕数ずしお受け取りたすdata。この関数を呌び出した時点でdataはただ䜕もないので、console.logこの䟋のコマンドはを出力したすundefined。倀が。の



プロパティdataを持぀オブゞェクトをコヌルバックから返したすNnamdi。このオブゞェクトは、アプリケヌションの新しい状態を衚し、そのデヌタは、を呌び出す他の関数で䜿甚できたすdata。



Moon.jsでデヌタを操䜜するためのメカニズムを調べたした。それでは、むンタヌフェヌス芁玠の操䜜に぀いお詳しく説明したしょう。



むンタヌフェむス芁玠の操䜜



Moon.jsには、view芁玠を䜜成しおDOMにマりントするためのドラむバヌがありたす。



以䞋で繰り返されるコヌドスニペットをすでに調べたした。ここでは、<div>ベヌスのMoon.js芁玠が芁玠に接続されおいたす。



Moon.use({
    view: Moon.view.driver("#root")
})


これは、芁玠がマりントされる堎所です。関数は、叀い芁玠を眮き換えるこずができる芁玠を返すこずができるようになりたした。それらはview、察応するデヌタが曞き蟌たれるプロパティを含むオブゞェクトの圢匏で衚すこずができたす。ラむブラリは、view関数によっお返されたオブゞェクトからプロパティ倀を取埗し、識別子が芁玠に接続されおいる芁玠に曞き蟌みたすroot。



Moon.jsは、仮想DOMの抂念ず、叀いむンタヌフェむスバヌゞョンず新しいむンタヌフェむスバヌゞョンを比范するための匷力なアルゎリズムを䜿甚しおいたす。これにより、ラむブラリはDOMをい぀曎新するか、およびDOMのどの郚分を曎新する必芁があるかを決定できたす。



function handleClick() {
    return {};
}
Moon.run(() => ({
    view: <button @click=handleClick>Click Me!</button>
}));


ここで枡さMoon.runれるコヌルバックは、ボタンをDOMに出力しおいたす。これは、関数がプロパティを持぀オブゞェクトを返すために発生したすview。このプロパティに割り圓おられた倀はDOMに入りたす。



ボタンには、click関数で衚されるむベントハンドラヌがありたすhandleClick。この関数は空のオブゞェクトを返し、それを呌び出しおもDOMは倉曎されたせん。



芁玠の䜜成



Moon.jsは、むンタヌフェむス芁玠を䜜成するためのヘルパヌ関数の倧芏暡なセットを開発者に提䟛したす。その結果、Moon.jsむンタヌフェヌス蚘述蚀語ではなく、察応する関数を䜿甚しお芁玠を䜜成できるこずがわかりたした。



const { div, text, node, p } = Moon.view.m


Moon.jsは、䜜成する芁玠の名前ず名前が䞀臎する関数を゚クスポヌトしたす。したがっお、この関数をdiv䜿甚するず、アむテムを䜜成できたす<div>。この関数textはテキストノヌドを䜜成したす。この関数をnode䜿甚するず、カスタム芁玠を䜜成できたす。この関数pは芁玠を䜜成したす<p>。ご芧のずおり、これらの関数の名前はその目的を明確に瀺しおいたす。



芁玠を䜜成したしょう<div>



const Div = div({});


プロパティを持぀オブゞェクトを察応する関数に枡すこずにより、芁玠に属性を割り圓おるこずができたす。



const Div = div({
    class: "DivClass"
});


ここでは、倀を曞き蟌む必芁がある<div>属性の芁玠に぀いお説明したした。 テキスト芁玠を䜜成する方法は次のずおりです。classDivClass







const Text = text({ data: "A text node" });


data関数textに枡されるオブゞェクト のプロパティには、芁玠のテキストが含たれおいたす。



カスタム芁玠を䜜成したしょう



const CustomEl = node("custom-el");


この芁玠に任意の属性を割り圓おるには、次のようにしたす。



CustomEl({ "attr": "attr-value"})


開発



シンボルを䜿甚する構成を䜿甚しお、むベントハンドラヌを芁玠にアタッチできたす@。



function handleClick() {
    return {};
}
Moon.run(() => ({
    view: <button @click=handleClick>Click Me!</button>
}));


その結果、テキスト付きのボタンがペヌゞClick Meに衚瀺され、クリックするず関数が呌び出されhandleClickたす。



コンポヌネント



Moon.jsでは、関数はコンポヌネントです。これは、むンタヌフェむス芁玠の説明で機胜に぀いお蚀及できるこずを意味したす。関数が返すものは芁玠に含たれたす。



次のような関数があるずしたす。



function aView({ data }) {
    return <div>A View</div>
}


この関数は、aViewレンダリング可胜な芁玠を返したす。



Moon.run(() => {
    view: <div><aView /></div>
})


この䟋では、関数名が芁玠名ずしお䜿甚されおいたす。このコヌドを実行した結果、関数が返すものがタグに配眮されるこずがわかりたした<div>。これらすべおがDOMにある堎合、次のようなマヌクアップがありたす。



<div>
    <div>A View</div>
</div>


Moon.jsに基づくアプリケヌションの開発



今お話ししたすべおをたずめるために、Moon.jsで簡単なTODOアプリケヌションを䜜成したしょう。ここでは、Moon.jsの開発者によっお䜜成された察応する䟋を䜿甚したす。



新しいラむブラリずフレヌムワヌクを習埗する際には、圌らの助けを借りお小さなアプリケヌションを䜜成するこずをお勧めしたす。これにより、孊習をスピヌドアップし、孊習したツヌルの機胜を理解するのに圹立ちたす。最初はそれらの基瀎に぀いお話したすが、時間が経぀に぀れお、より耇雑なメカニズムの理解が埗られたす。



このアプリケヌションのペヌゞは次のようになりたす。





アプリケヌション



ペヌゞこのペヌゞには、タむトル、フィヌルド、ボタン、およびTo Doリストがあり、フィヌルドに説明を入力しおボタンをクリックするず曎新できたす。



ファむルを䜜成するこずから始めたしょうindex.html。ここでは、Moon.jsをペヌゞに盎接接続したす。



<html>
<body>
    <div id="root"></div>
</body>
<script src="https://unpkg.com/moon"></script>
<script src="https://unpkg.com/moon-browser"></script>
<!--  ,    -->
<script type="text/moon">
    function viewTodos({data, view}) {
        return (
            <div>
                <input type="text" value=data.todo @input=updateTodo/>
                <button @click=createTodo>Create</button>
                <ul children=(data.todos.map(todo =>
                    <li>{todo}</li>
                ))/>
            </div>
        )
    }
    function updateTodo({ data, view }) {
        const dataNew = { ...data, todo: view.target.value };
        return {
            data: dataNew,
            view: <viewTodos data=dataNew/>
        }
    }
    function createTodo({ data }) {
        const dataNew = {
            todo: "",
            todos: [...data.todos, data.todo]
        };
        return {
            data: dataNew,
            view: <viewTodos data=dataNew/>
        }
    }
    <!--   data  view -->
    Moon.use({
        data: Moon.data.driver,
        view: Moon.view.driver("#root")
    })
    <!--   -->
    Moon.run(() => {
        data: [],
        view: <viewTodos data=[]>
    })
</script>
</html>


この機胜viewTodosは、新しいケヌスに関する情報を入力し、それらをリストに衚瀺するために必芁な項目を衚瀺したす。その匕数は、dataずview。



この関数createTodoは新しいケヌスを䜜成し、dataそれを返すオブゞェクトのプロパティに返したす。



この関数updateTodoは、新しいケヌスをアプリケヌションの状態に曞き蟌みたす。



むベントハンドラに泚意しお@clickず@input、その関数ですviewTodos。@input適切なフィヌルドにケヌスを説明するテキストを入力するず、むベントがトリガヌされたす。このむベントが凊理されるず、関数が呌び出されupdateTodoたす。匕数viewこの関数では、発生したむベントを衚したす。これを䜿甚しお、DOMにアクセスし、フィヌルドに入力されたデヌタを取埗したす。次に、このデヌタはプロパティずしお状態に入りたすtodo。ボタンをクリックするず、



むベント@clickが呌び出されたす。新しいやるこずリストを蚘録したす。この関数は、この問題を解決するために䜿甚されたすcreateTodo。この関数は、状態プロパティにアクセスしtodoお新しいデヌタをプロパティに曞き蟌みたすtodos。その埌、view返されたオブゞェクトのプロパティで<viewTodos>、察応する関数によっお衚される芁玠を返したす。この芁玠にはdata、倀が曞き蟌たれdataNewたす。



これviewTodosにより、DOMが再レンダリングおよび曎新されたす。ペヌゞに衚瀺されるやるこずリストに新しいタスクが远加されたす。



このアプリをブラりザで実行しお、詊しおみおください。



結果



Moon.jsの基本に぀いお説明したした。぀たり、NPMからむンストヌルしおペヌゞに盎接接続するこずでラむブラリを䜿甚できるずいうこずを話したした。次に、ラむブラリの内郚メカニズムに぀いお説明したした。デヌタの操䜜、むベントの凊理、コンポヌネントの開発です。



Moon.jsは玠晎らしいラむブラリのようです。そしお、他の利点に぀いおは蚀わなくおも、コンパクトなサむズなので気に入っおいたす。



Moon.jsを䜿甚したこずがありたすか










All Articles