Nim의 프레임을 사용해 볼게요. Karax.

31051 단어 Nimtech

개요


처음으로 젠에게 투고하여 보도하다
초보자라서 안 되는 부분이 많은데 지적해 주시면 좋을 것 같아요.
Nim SPA 프레임워크 Karax를 사용하여 간단한 세 가지 배열 만들기
Karax의 창고

요점

  • Nim의 Karax라는 프레임워크를 사용하면 React와 같은 가상 DOM을 사용하는 SPA
  • 를 제작할 수 있다.
  • Nim의 간결한 기법으로 쓸 수 있어 가볍다
  • 구성 요소 간의 정보 교환에 신경 쓸 필요가 없기 때문에 (개발에 적합하지는 않지만) 쉽게 쓸 수 있다
  • 작업 환경


    Nim Compiler Version 1.0.6
    nimble v0.11.0
    Karax 1.1.3

    Karax 설치


    전제 조건

  • OS에 Nim
  • 설치
  • Nim과 함께 제공되는 패키지 관리자 Nimble
  • 설치

    절차.

  • 적당한 목록을 준비하세요.현재 디렉토리 이름은 항목 이름
  • 입니다.
  • 디렉토리로 이동
  • $ nimble init
    
  • nimble initnim 프로젝트를 만드는 명령
  • • karax 설치
    $ nimble install karax
    
    홈 디렉토리의nimble에 봉인 설치

    Karax를 이동해 보도록 하겠습니다.


    index.html

  • src에서 다음과 같은 > 파일을 만듭니다.파일 이름은 뭐든지 가능하니까 index부터 하세요.)
  • index.html
    index.html
    <!DOCTYPE html>
    
    <html>
    <head>
        <title>HelloWorld</title>
    
        <link rel="stylesheet" href="./index.css">
        <link rel="icon" href="/favicon.ico">
    </head>
    
    <body>
        <div id="ROOT" />
        <script type="text/javascript" src="./helloworld.js"></script>
    </body>
    </html>
    
  • body 태그 내#ROOT에 nim 파일의 Karax 설명을 사용한 가상 DOM
  • 추가
  • script에는 Helloworld가 있다.nim에서 전송된 js 파일 지정하기
  • helloworld.nim


    · Hello World를 표시하기 위한 코드를 Karax 라이브러리로 쓰기
    ・index.와 같이 src 내에서 Hello World.배nim
    helloworld.nim
    include karax/prelude
    
    proc createDom(): VNode =
      return buildHtml(tdiv):
        text "Hello World!"
    
    setRenderer createDom
    
  • helloworld.nim을 JavaScript로 변환합니다.src내helloworld에서출력 이름이 js인 파일
  • $ nim js src/helloworld.nim
    

    그리고...


  • 브라우저에서 index.로그 열기

  • Hello World! 성공하다
  • 세 번째 줄을 서보도록 하겠습니다.


    리팩트 만드는 레슨, 익숙한 세 가지로 나열해 주세요.
    이번에 제작된 제품은 다음과 같은 기능을 갖춘 제품입니다.
  • 버튼을 누르면 x 또는 o
  • 표시
  • 버튼을 눌렀을 때마다 다음 입력은 x인지 o인지 바뀐다
  • 이어서 x가 입력인지 o
  • 인지 표시
  • x 또는 o가 일직선으로 배열되면 더 이상 입력을 받지 않습니다
  • 일직선으로 배열 시 승리자 표시
  • tictactoe.nim


    완성형의 코드는 다음과 같다
    tictactoe.nim
    include karax/prelude
    import algorithm
    
    var 
      status: array[0..8,kstring]
      xIsNext: bool = true
      winner: kstring = kstring""
    
    status.fill(kstring"")
    
    proc calculateWinner(): kstring =
      const lines = @[
            [0, 1, 2],
            [3, 4, 5],
            [6, 7, 8],
            [0, 3, 6],
            [1, 4, 7],
            [2, 5, 8],
            [0, 4, 8],
            [2, 4, 6],
      ]
      for i in lines:
        var a, b, c: int
        (a, b, c) = i
        if status[a] != kstring"" and status[a] == status[b] and status[a] == status[c]:
          return status[a]
      return ""
    
    proc square(m: int): VNode =
      proc squareOnClick(a: int): proc() = 
        return proc() =
          if winner != kstring"": return
          status[a] = if xIsNext: kstring"x" else:kstring"o"
          xIsNext = not xIsNext
          winner = calculateWinner()
    
      return buildHTML(tdiv):
        button(class = "square",onclick = squareOnClick(m)):
            text status[m]
    
    proc board(): VNode =
      return buildHtml(tdiv):
        for i in 0..2:
          tdiv(class = "board-row"):
            for j in 0..2:
              square(i*3+j)
    
    proc createDom(): VNode =
      return buildHtml(tdiv):
        board()
        tdiv(class = "container"):
          tdiv:
            if winner == "":
              text "Next: " & (if xIsNext:"x" else:"o")
            else:
              text "Winner: " & winner
    
    
    setRenderer createDom
    
    Nim과 Karax에서 독특한 기법을 간단히 소개해 주세요.

    변수 선언


    var 
      status: array[0..8,kstring]
      xIsNext: bool = true
      winner: kstring = kstring""
    
    status.fill(kstring"")
    
  • Vue와 React처럼 각 구성 요소의 관리 상태에 대한 변수를 준비할 필요가 없음
  • 전역적으로 정의된 변수는 모든 가상 DOM에서 접근할 수 있기 때문에 요소 간의 값을 쉽게 연결할 수 있다
  • Nim의 기능
  • 은 var의 코드 블록을 제작하고 정지하는 동시에 변수 성명을 할 수 있다
  • Nim으로 다른 언어로 연결할 때string형이 아니라kstring형
  • 을 사용해야 한다.

    board


    proc board(): VNode =
      return buildHtml(tdiv):
        for i in 0..2:
          tdiv(class = "board-row"):
            for j in 0..2:
              square(i*3+j)
    
  • 일부 집합 부분을 함수 구성 요소로 구현
  • V-노드가 있는 가상 DOM의 유형
  • buildHtml:의 블록에서 HTML 라벨에 대응하는 블록을 제작하고 가상 DOM
  • 을 제작한다.
  • div는 Nim의 삽입에 위치하기 때문에 div 라벨은 tdiv[1]로 표시됩니다
  • <タグ名>(属性=値,属性=値,属性=値,...):의 형식으로 속성을 설정할 수 있다
  • 라벨에 글을 설정하고text stringtext(string) 방식으로 진행
  • Html 태그의 블록에서 for문장
  • 사용 가능
  • 이 문법들은 Nim의 매크로 기능으로 이루어진 것으로 전송되기 전에 개작
  • square


    proc square(m: int): VNode =
      proc squareOnClick(a: int): proc() = 
        return proc() =
          if winner != kstring"": return
          status[a] = if xIsNext: kstring"x" else:kstring"o"
          xIsNext = not xIsNext
          winner = calculateWinner()
    
      return buildHTML(tdiv):
        button(class = "square",onclick = squareOnClick(m)):
            text status[m]
    
  • 매개변수를 가져오는 동안 가상 DOM
  • 을 반환합니다.

  • 이벤트를 イベント名 = proc{...} 형식으로 등록할 수 있음
  • 매개 변수와 이벤트를 연결하려면 씹는 동안 과정을 되돌려주는 과정이 필요하다
  • 예를 들어 button(class="square",onclick = proc() = status[a] = if xIsNext: kstring"x" else:kstring"o"):도 제대로 작동하지 않는다
  • createDom + Setrenderer


    proc createDom(): VNode =
      return buildHtml(tdiv):
        board()
        tdiv(class = "container"):
          tdiv:
            if winner == "":
              text "Next: " & (if xIsNext:"x" else:"o")
            else:
              text "Winner: " & winner
    
    setRenderer createDom
    
  • for문을 사용할 수 있기 때문에if문
  • 도 사용할 수 있다
  • 마지막으로 setRenderer 仮想DOM해야 돼
  • 실행


    $ nim js src/tictactoe.nim
    
    에서 js로 수송한 후 src내tictactoe.js라는 파일을 만들 수 있을 것 같아서 그 index에 맞춰요.덮어쓰기).그리고 저도 css를 추가해 드릴게요.
    index.html
    <!DOCTYPE html>
    
    <html>
    <head>
        <title>○×ゲーム</title>
    
        <link rel="stylesheet" href="./index.css">
        <link rel="icon" href="/favicon.ico">
    </head>
    <body id="body">
    
    <div id="ROOT" />
    <script type="text/javascript" src="./tictactoe.js"></script>
    
    </body>
    </html>
    
    index.css
    index입니다.나는 브라우저에서 파일을 열 것이다.

    이렇게 완성!

    요약(재등재)

  • Nim의 Karax라는 프레임워크를 사용하면 React와 같은 가상 DOM을 사용하는 SPA
  • 를 제작할 수 있다.
  • Nim의 간결한 기법으로 쓸 수 있어 가볍다
  • 구성 요소 간의 정보 교환에 신경 쓸 필요가 없기 때문에 (개발에 적합하지는 않지만) 쉽게 쓸 수 있다
  • 참고 자료


    Karax용 문서
    React 자습서


    구글 검색과tictactoe로 조사하면...
    각주
    유사한 예로 i 라벨은italic이고 b 라벨은bold이며 u 라벨은underlined↩︎로 써야 한다.

    좋은 웹페이지 즐겨찾기