dioxus-compose 가이드

문제 해결

문제와 알아보는 방법

HTML 경로에서 놀라는 일은 대부분 아직 만들어지지 않은 것에서, 위젯 경로에서는 대부분 텍스트 입력 규칙에서 옵니다. 절마다 어떤 경우인지와 왜 그렇게 동작하는지를 적었습니다.

HTML 앱이 창을 열지 않습니다

지금은 정상입니다. HtmlDom 은 앱을 실행하고 배치해서 그리기 목록과 계획을 돌려주지만, 그 계획을 렌더러에 넘기는 것이 아직 없습니다 (#43). 화면은 대신 레이아웃으로 확인합니다. 항목을 출력하거나 예제처럼 테스트합니다.

클릭이나 변경이 보이지 않습니다

핸들러는 click, input 같은 호출 안에서 실행되고, 문서는 render 를 불러야 바뀝니다. 그리기 목록은 다음 layout 에서야 바뀝니다. 그래서 순서는 언제나 호출, render, layout 입니다.

dom.click(x, y);
dom.render();
dom.layout(800.0, 600.0, 1.0);

그 자리 아래에 듣는 것이 없으면 click 은 None 을 돌려줍니다. 그 점이 잘라 내는 조상의 바깥이거나 z-index 가 더 높은 상자 아래에 있을 때도 그렇습니다. 그 자리에 어떤 노드가 있는지는 hit_test(x, y) 가 알려 줍니다.

타이핑해도 페이지가 바뀌지 않습니다

입력란은 일부러 비제어입니다. 글자는 렌더러가 갖고, 확정된 글자가 oninput 으로 옵니다. 페이지는 핸들러가 무언가 그리는 데 쓰이는 시그널에 써야 바뀝니다. samples/chat 이 초안으로 그렇게 합니다. 입력란은 비제어입니다를 보십시오.

텍스트 크기가 브라우저와 다릅니다

측정기를 따로 넘기지 않으면 Parley 가 텍스트를 재고, macOS 에서 Parley 의 크기는 Chromium 과 줄바꿈이 달라질 만큼 차이 납니다. 글꼴이 섞인 문단, 표 칸, 입력 컨트롤은 측정기를 넘겨도 Parley 가 잽니다. Compose 로 재는 것은 부분 입니다 (#43). 텍스트 크기가 맞으면 상자 배치 자체는 VS Code 와 1px 이내로 맞습니다.

이미지가 그려지지 않거나 크기가 없습니다

CSS 기능이 효과가 없습니다

빌드가 렌더러를 받지 못합니다

렌더러는 미리 빌드된 네이티브 라이브러리이고, compose-rust 의 빌드 스크립트가 대상 플랫폼용을 내려받아 공개된 체크섬과 대조합니다. 실패하면 빌드가 무엇을 시도했는지 알려 줍니다. 네트워크 없이 빌드하기, 직접 빌드한 렌더러 쓰기, 다운로드 캐시 옮기기는 compose-rust README 에 있습니다.

위젯 경로의 IME 문제

Enter 가 제출하면서 음절을 잃습니다. 한글을 치고 음절을 확정하려고 Enter 를 눌렀는데 그 음절 없이 메시지가 보내집니다. 조합 중에 키 이벤트가 Rust 에 닿은 것이고, 렌더러는 그것을 절대 허용하면 안 됩니다. 핸들러가 아니라 렌더러의 버그입니다.

타이핑하는 동안 조합이 초기화됩니다. 음절을 만드는 동안 글자가 사라지거나 순서가 바뀝니다. 조합 중에 무언가 Rust 에서 입력란의 글자를 정한 것입니다. TextField 에 value 가 없는 이유가 바로 이것이고, 입력란은 새 정체성을 주어 비웁니다.

ProtocolError 이벤트

렌더러가 모르는 위젯, 속성, 모디파이어는 아무것도 멈추게 하지 않습니다. 렌더러는 코드와 메시지를 담은 ProtocolError 이벤트를 보냅니다. 두 쪽이 스키마에 대해 다르게 알고 있다는 뜻이고, 보통은 빌드가 링크한 것과 다른 compose-rust 버전의 렌더러입니다. 더 큰 불일치는 더 일찍 잡힙니다. 시작할 때 스키마 해시를 비교하고, 두 쪽이 함께 돌기를 거부합니다.