SolidJS로 Material-II(SUID)를 시도했습니다.
SUID
React용MUI을 SolidJS에port(이식)하는 프로그램 라이브러리입니다.
버전 0.1.0에 36개의 구성 요소가 이식되었다.
또 SUID의 사이트 자체는 SUID로 제작·구축됐다.
SUID의 다음 버전(0.2.0)에는 대응 구성 요소 3개Radio·Table·Grow가 추가됩니다.
시도된 버전
시도된 내용
Supabase의Quickstart: SolidJS는 TypeScript(TSX)와 Material-II로 교체하고Card도 추가 디스플레이를 시도했다.
!
이번에는 수파베이스 관련 부분에 대한 설명을 생략합니다(다른 기사에서 설명할 예정).
샘플 코드(전체)
여기다 놔.제목과 같이 2022/5/31 개최 예정제33회 PostgreSQL 안전회@온라인을 위한 샘플이다.
다음에 나는 샘플 코드의 사용 예와 신경 쓰이는 부분을 열거했다. (물론 향후 버전에 변화가 발생할 수 있다.)
텍스트 입력 필드
사용 예
Auth.tsx(77행~)
<TextField
required
id="email"
label="メールアドレス"
helperText="メールアドレスを入力してください"
value={email()}
onChange={(event, value) => {
setEmail(value);
}}
/>
required
지정된 경우 Submit Form을 입력하지 않으면 경고가 표시되고 차단됩니다.그러나 Submit을 사용하지 않고 "*"기호만 표시하면 블록 동작 등이 발생하지 않습니다(Validation을 직접 설치해야 함).inputRef가 지원되지 않습니다.
리액트의 MUSIC
TextField
는 대체ref
사용inputRef
이 가능하지만, SUID는 지원하지 않는다.이번에는 화면 표시 후 포커스를 지정하려 했으나 사용을 포기
document.getElementById()
하고 포커스를 옮겼다.setFocus.ts(3행~)
const element = document.getElementById(elementId);
element?.focus();
Auth.tsx(18행~)
onMount(() => {
setFocus('email');
})
multipline이 지원되지 않습니다.
SUID가 현황TextareaAutosize을 지원하지 않기 때문에
TextField
로 대체Multiline하려고 했지만 대응multiline
·row
등이 없었다.어쩔 수 없어요. 그냥
textarea
라벨을 썼어요.Item.tsx(155행~)
<textarea
id="note"
aria-label="Note"
placeholder="本文を入力してください"
onchange={(event) => {
setNote(event.currentTarget.value);
}}
style="width: 100%; height: 9.0em; font-size: 1rem; line-height: 1.8em"
>
{note()}
</textarea>
카드(카드 표시)
사용 예
List.tsx(182행~)
<Card
variant="outlined"
sx={{ minWidth: 300 }}
>
<CardContent>
<Stack
spacing={1}
direction="row"
>
<CardActions sx={{ padding: 0 }}>
<IconButton
onClick={() => toggleExpand(index(), !article.isExpand)}
sx={{ padding: 0 }}
>
<Switch fallback={<></>}>
<Match when={!article.isExpand}>
<ExpandMoreIcon aria-label="expand more"/>
</Match>
<Match when={article.isExpand}>
<ExpandLessIcon aria-label="expand less"/>
</Match>
</Switch>
</IconButton>
</CardActions>
<Typography
variant="h6"
gutterBottom
>
{article.title}
</Typography>
(中略)
</Stack>
<Show
when={article.isExpand}
fallback={<></>}
>
<For
each={article.note?.split('\n')}
fallback={<></>}
>
{(line) =>
<Typography
variant="body1"
gutterBottom
>
{line}
</Typography>
}
</For>
</Show>
<CardActions sx={{ padding: 0 }}>
<IconButton
aria-label="edit"
onClick={() => setArticle(article)}
disabled={
article.userId !== props.session.user!.id && article.noteType !== 3
}
>
<EditIcon />
</IconButton>
(中略)
</CardActions>
</CardContent>
</Card>
※'신규 투고'에 이은 카드입니다.또'신설 발언'도
Card
에 나와 있다.Collapse API가 지원되지 않습니다.
리액트용 MCICollapse API는 지원되지 않기 때문에 위에 기재된 코드도 SolidJS 자체 보유Show API로 유사하게 처리한다.
List.tsx (196 줄 ~: 단추 부분 펼치기)
<Switch fallback={<></>}>
<Match when={!article.isExpand}>
<ExpandMoreIcon aria-label="expand more"/>
</Match>
<Match when={article.isExpand}>
<ExpandLessIcon aria-label="expand less"/>
</Match>
</Switch>
List.tsx(229행~: 실제 전개된 부분) <Show
when={article.isExpand}
fallback={<></>}
>
<For
each={article.note?.split('\n')}
fallback={<></>}
>
{(line) =>
<Typography
variant="body1"
gutterBottom
>
{line}
</Typography>
}
</For>
</Show>
사용한 소감.
버전이 0.1.1인 만큼 정품 제품을 만드는 데 부족한 구성 요소인 API는 아직도 많은 인상을 준다.
향후 버전 업그레이드가 기대됩니다.
참고: 기타 샘플 화면
소개 편집 화면
Reference
이 문제에 관하여(SolidJS로 Material-II(SUID)를 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/hmatsu47/articles/solidjs-suid-sample텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)