양식 및 웹 구성 요소만 사용하는 보다 확장 가능한 애플리케이션
19535 단어 preactwebcomponentsreacthtml
전통적인 형태?
<form>
태그의 사용을 의미합니다. 예를 들면 다음과 같습니다.<form actio="myAction">
<input type="name" />
<button>submit</button>
</form>
이제 MagicForm의 일부 마법을 추가해 보겠습니다.
<MagicFormProvider
actions={{
async myAction(form: HTMLFormElement) {
return myApi(new FormData(form));
},
}}
>
<MagicForm>
<form actio="myAction">
<input type="name" />
<button>submit</button>
</form>
</MagicForm>
</MagicFormProvider>
위의 코드에서 2개의 구성 요소를 추가했습니다.
MagicFormProvider
: 중첩된 MagicForms의 작업을 중앙 집중화합니다.MagicForm
: MagicFormProvider에서 관찰할 양식을 식별합니다. 이 구성 요소는 또한 onChangeState 이벤트를 통해 myAction 함수의 전송 및 반환 상태를 알 수 있도록 합니다.MagicForm 사용의 이점은 다음과 같습니다.
1. 재사용 가능한 작업
MagicFormProvider 덕분에 양식 간에 작업을 쉽게 재사용할 수 있습니다. 예를 들면 다음과 같습니다.
<MagicFormProvider
actions={{
async myAction(form: HTMLFormElement) {
return myApi(new FormData(form));
},
}}
>
<MagicForm>
<form actio="myAction">
<input type="name" />
<button>submit</button>
</form>
</MagicForm>
<MagicForm>
<form actio="myAction">
<input type="name" />
<button>submit</button>
</form>
</MagicForm>
</MagicFormProvider>;
2. 양식의 상태를 관찰하십시오.
양식 제출 프로세스는 onChangeState 이벤트를 통해 관찰할 수 있으며 이를 통해 제출 상태 및 작업 응답을 알 수 있습니다.
<MagicForm
onChangeState={({ currentTarget }) => {
console.log(currentTarget.state);
}}
>
<form actio="myAction">
<input type="name" />
<button>submit</button>
</form>
</MagicForm>
3. 마이크로프론트엔드
MagicFormProvider가 작업 중에서 파견된 작업을 찾지 못하면 다음 MagicFormProvider까지 계속 버블링됩니다. 이렇게 하면 격리되고 재사용 가능한 작업이 있는 여러 개의 섬을 가질 수 있습니다. 예를 들면 다음과 같습니다.
<MagicFormProvider actions={{
async login(){...}
}}>
<MagicFormProvider actions={actionsClient}>
<PageClient/>
</MagicFormProvider>
<MagicFormProvider actions={actionsAdmin}>
<PageAdmin/>
</MagicFormProvider>
</MagicFormProvider>
아름답지 않나요? 그러나 그것을 사용하는 방법
웹 컴포넌트
<magic-form-provider>
<magic-form>
<form action="user">
<input type="text" name="name" />
<input type="text" name="email" />
<button>Create user</button>
</form>
</magic-form>
</magic-form-provider>
<script>
await customElements.whenDefined("magic-form-provider");
document.querySelector("magic-form-provider").actions = {
async add(form) {
return fetch("./my-api", {
method: "post",
body: new FormData(form),
}).then((res) => res.json());
},
};
</script>
Atomico JS
import { MagicForm, MagicFormProvider } from "@atomico/magic-form";
function component() {
return (
<host>
<MagicFormProvider
actions={{
async add(form) {
return fetch("./my-api", {
method: "post",
body: new FormData(form),
}).then((res) => res.json());
},
}}
>
<MagicForm>
<form action="user">
<input type="text" name="name" />
<input type="text" name="email" />
<button>Create user</button>
</form>
</MagicForm>
</MagicFormProvider>
</host>
);
}
반응 및 예측
React 또는 Preact에서 이 웹 구성 요소를 사용하려면
@atomico/react
를 설치해야 합니다. Preact에서 사용하려면 모듈을 "@atomico/magic-form/react"
에서 "@atomico/magic-form/preact"
로 변경해야 합니다.import { MagicForm, MagicFormProvider } from "@atomico/magic-form/react";
export function App() {
return (
<>
<MagicFormProvider
actions={{
async add(form) {
return fetch("./my-api", {
method: "post",
body: new FormData(form),
}).then((res) => res.json());
},
}}
>
<MagicForm>
<form action="user">
<input type="text" name="name" />
<input type="text" name="email" />
<button>Create user</button>
</form>
</MagicForm>
</MagicFormProvider>
</>
);
}
MagicForm은 AtomicoJS 프로젝트입니다.
AtomicoJS? 웹 구성 요소를 기반으로 인터페이스를 생성하기 위한 오픈 소스 프로젝트인 MagicForm은 기능적 접근 방식으로 웹 구성 요소를 생성할 수 있는 단 3kB의 라이브러리인 Atomico로 생성되었습니다. 웹 구성 요소에 대한 경험을 향상시킬 것입니다.
👐 Atomicojs 커뮤니티에 가입하여 우리 프로젝트에 대해 자세히 알아보도록 초대합니다! 👇
Reference
이 문제에 관하여(양식 및 웹 구성 요소만 사용하는 보다 확장 가능한 애플리케이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/uppercod/more-scalable-applications-only-using-forms-and-webcomponents-14ld텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)