Solid-js 기초 튜 토리 얼
8610 단어 javascript 전단
사용자 인터페이스 구축 에 사용 되 는 성명 식,효율 적 이 고 유연 한 자 바스 크 립 트 라 이브 러 리공식 강좌에서 아래 에서 언급 한 일부 예 를 시도 할 수 있 습 니 다.본 고 는 공식 튜 토리 얼 의 일부 예 를 인용 하고 간소화 하 였 습 니 다.
본 고 는 일부 solid 의 주요 내용,더 많은 상세 한 내용,이동Solid API 문서을 서술 한다.
Solid 는 React 와 비슷 한 문법 과 Svelte 와 유사 한 사전 컴 파일 Solid 를 사 용 했 습 니 다.Solid 는 React 와 유사 하지만 React 와 달리 구성 요 소 는 한 번 만 초기 화 됩 니 다.state 가 바 뀌 면 전체 구성 요 소 를 렌 더 링 하 는 것 이 아 닙 니 다.이것 은 Vue 3 의 setup 과 유사 합 니 다.
솔 리드 를 선택 한 이유
솔 리드 홈 페이지다음 과 같은 이 유 를 제시 했다.
고성능-원생 에 가 까 운 성능,js-framework-benchmark순위 에서 상위 권 에 있 는 아주 작은 포장 부피-직접 DOM 작업 으로 컴 파일 되 며,가상 DOM 이 없 으 며,아주 작은 운행 시(Svelte 와 유사)독립 된 웹 Component 로 다른 응용 프로그램 에 삽입 하여 사용 하기 쉽 습 니 다-React 와 가 까 운 사용 체험 으로 빠 른 속도 로 시작 할 수 있 습 니 다.
빠 른 시작
새 항목
npx degit solidjs/templates/js my-app
cd my-app
npm i
npm run dev
기본 예시
여기에 App 구성 요 소 를 body 용기 에 렌 더 링 합 니 다.
여기 서 기본 예제 를 수정 하고 0 부터 시도 합 니 다.
// App.JSX
import { render } from "solid-js/web";
function App() {
return (
Solid My App
);
}
//
/*
const App = ()=> (Solid My App);
*/
render(() => , document.querySelector("body"));
너무 익숙해 보이 지 않 아 요?React 처럼 편 해 요.
구성 요소 가 져 오기,전달 구성 요소,props
React 와 유사 한 사용 방법 이지 만 props 를 해체 할 수 없습니다.그렇지 않 으 면 반응 성 을 잃 게 됩 니 다.
// App.JSX
import { render } from "solid-js/web";
import Component1 from "./Component1.jsx";
function App() {
return (
Solid My App
children
);
}
render(() => , document.querySelector("body"));
// Component1.jsx
export default function Component1(props) {
return (
{props.text}
{props.children}
)
}
반응 성
createSignal
signal 은 Solid 에서 가장 기본 적 인 반응 유닛 입 니 다.이 함 수 는 React 의 useState 와 유사 하지만,반환 함 수 는 React 처럼 직접 값 을 얻 는 것 이 아니 라 호출 값 을 얻 는 데 사 용 됩 니 다.다음은 기본 적 인 Counter 예제 입 니 다.
import { createSignal } from "solid-js";
export default function Counter() {
const [count, setCount] = createSignal(0);
return (
)
}
createMemo
createMemo 는 읽 기 전용 파생 값 을 만 드 는 데 사 용 됩 니 다.Vue 의 coptute 와 유사 합 니 다.위의 것 과 마찬가지 로 호출 을 통 해 값 을 가 져 와 야 합 니 다.
import { createSignal, createMemo } from "solid-js";
export default function Counter() {
const [count, setCount] = createSignal(0);
// count count,
const countPow2 = createMemo(()=> count() ** 2);
return (
)
}
createEffect
createEffect 는 일반적으로 부작용 에 사 용 됩 니 다.상태 가 바 뀔 때 부작용 을 실행 합 니 다.React 의 useEffect 와 유사 하지만 자동 으로 의존 을 수집 합 니 다.명시 적 으로 의존 하지 않 아 도 됩 니 다.이것 은 Vue 의 watchEffect 역할 과 같 습 니 다.
import { createSignal, createEffect } from "solid-js";
export default function Counter() {
const [count, setCount] = createSignal(0);
//
createEffect(()=> console.log(count()));
return (
)
}
명시 적 성명 의존 이 필요 하 다 면 참고Solid createEffect 명시 적 성명 의존
batch
Solid 의 반응 성 은 동기 화 되 어 있 습 니 다.이 는 변 경 된 다음 줄 의 DOM 이 업데이트 된다 는 것 을 의미 합 니 다.솔 리드 의 입도 렌 더 링 은 반응 식 시스템 에서 업 데 이 트 된 전파 일 뿐 이 므 로 대다수 상황 에 서 는 전혀 문제 가 없다.'두 번 의 무관 한 변경 은 사실상 일 을 낭비 하 는 것 을 의미 하지 않 는 다.변경 이 관련 이 있다 면 어떻게 합 니까?Solid 의 batch 조 수 는 여러 개의 줄 을 바 꾸 고 관찰자 에 게 알 리 기 전에 동시에 사용 할 수 있 습 니 다.일괄 처리 에서 업 데 이 트 된 신호 값 은 완 료 될 때 까지 제출 합 니 다.아래 batch 를 사용 하지 않 는 예 를 참고 하 십시오.
import { render } from "solid-js/web";
import { createSignal, batch } from "solid-js";
const App = () => {
const [firstName, setFirstName] = createSignal("John");
const [lastName, setLastName] = createSignal("Smith");
const fullName = () => {
console.log("Running FullName");
return `${firstName()} ${lastName()}`
}
const updateNames = () => {
console.log("Button Clicked");
setFirstName(firstName() + "n");
setLastName(lastName() + "!");
}
return
};
render(App, document.getElementById("app"));
이 예 에서 우 리 는 단 추 를 눌 렀 을 때 두 개의 상 태 를 업 데 이 트 했 습 니 다.두 번 의 업 데 이 트 를 실 행 했 습 니 다.콘 솔 에서 로 그 를 볼 수 있 습 니 다.따라서 updateNames 를 수정 하여 set 호출 을 일괄 처리 합 니 다.
const updateNames = () => {
console.log("Button Clicked");
batch(() => {
setFirstName(firstName() + "n");
setLastName(lastName() + "!");
})
}
현재 같은 요소 에 대해 서 는 업데이트 가 한 번 만 실 행 됩 니 다.
양식
아래 에서 사용 할 수 있 도록 스타일 파일 을 만 듭 니 다.
/* main.css */
.container {
width: 100px;
height: 100px;
background-color: green;
}
.text {
font-size: 20px;
color: red;
}
기본 사용
스타일 사용 도 React 와 매우 유사 합 니 다.className 대신 class 만 사용 합 니 다.
import style from "./main.css";
export default function Container() {
return (
text
)
}
classList
주어진 class 가 존재 하 는 지 설정 하 는 데 사 용 됩 니 다.응답 식 을 바 꿀 수도 있 습 니 다.다음은 class 전환 을 누 르 는 예제 입 니 다.
import style from "./main.css";
import { createSignal } from "solid-js";
export default function Container() {
const [hasTextClassName, setHasTextClassName] = createSignal(false);
return (
setHasTextClassName(!hasTextClassName())
}
>
text
)
}
기본 제어 흐름
제어 흐름 은 대부분 JSX 로 같은 기능 을 실현 할 수 있 지만 이 를 사용 하면 JSX 보다 높 은 성능 을 가지 기 때문에 Solid 는 이 를 더욱 최적화 할 수 있다.
fallback 은 실패 후 표 시 됩 니 다.
For
간단 한 인용 키 제어 순환 제어 프로 세 스.
export default function Container() {
return (
Failed }
>
{(item) => {item}}
)}
Show
Show 제어 흐름 은 보기 의 일부분 을 조건 부 로 렌 더 링 하 는 데 사 용 됩 니 다.그것 은 3 원 연산 자(a?b:c)하지만 템 플 릿 화 JSX 에 아주 적합 합 니 다.
import { createSignal } from "solid-js";
export default function Container() {
const [count, setCount] = createSignal(10);
return (
{/* count 5 */}
5}
fallback={Failed}
>
content
)
}
Switch
Switch 는 2 개 이상 의 상호 배척 조건 이 있 을 때 유용 하 다.간단 한 경로 같은 일 을 할 수 있다.
import { createSignal } from "solid-js";
export default function Container() {
const [count, setCount] = createSignal(10);
return (
Failed }>
5}>
count > 5
count < 5
)}
Index
색인 교체 순환 제어 프로 세 스 가 아 닌 배열 이 아 닌 유사 한 대상 을 교체 하려 면 Index 를 사용 하 십시오.
export default function Container() {
return (
Failed }
>
{(item) => {item}}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript 베이스(7)콜 () 과 apply () 를 호출하면 대상을 첫 번째 인자로 지정할 수 있습니다. Math.floor () 는 한 수를 아래로 가져올 수 있습니다. Math.round () 는 한 수를 반올림하여 정돈할 수 있다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.