Jadual Kandungan
Permulaan cepat
Buat dan membuat komponen
Gunakan isyarat untuk mengesan nilai yang berubah
Untuk membuat senarai:
Primitif responsif
createeffect
creatememo
Kaedah kitaran hayat
penyimpanan
Aliran kawalan
Projek Demo
Rumah hujung hadapan web tutorial css Pengenalan kepada Perpustakaan JavaScript Pepejal

Pengenalan kepada Perpustakaan JavaScript Pepejal

Mar 20, 2025 am 09:42 AM

Pepejal: Perpustakaan UI JavaScript responsif berprestasi tinggi

Pengenalan kepada Perpustakaan JavaScript Pepejal

Pepejal adalah perpustakaan JavaScript yang responsif untuk mewujudkan antara muka pengguna, yang tidak memerlukan DOM maya. Ia menyusun templat ke dalam nod DOM sebenar dan membungkus kemas kini dalam reaksi halus, jadi apabila keadaan dikemas kini, hanya kod yang relevan akan dijalankan.

Kaedah ini membolehkan pengkompil mengoptimumkan kemas kini rendering dan runtime awal. Fokus pada prestasi ini menjadikannya salah satu kerangka JavaScript yang paling terkenal.

Saya ingin tahu tentang perkara ini dan ingin mencubanya, jadi saya meluangkan sedikit masa untuk membuat aplikasi tugasan kecil untuk meneroka bagaimana rangka kerja ini mengendalikan komponen rendering, mengemas kini keadaan, menyediakan penyimpanan, dan banyak lagi.

Jika anda tidak sabar untuk melihat kod akhir dan hasil, lihat demo akhir: [pautan demo akhir harus dimasukkan di sini, tidak disediakan dalam teks asal]

Permulaan cepat

Seperti kebanyakan kerangka, kita boleh mulakan dengan memasang pakej NPM. Untuk menggunakan rangka kerja dengan JSX, jalankan:

 NPM Pasang Solid-JS Babel-Preset-Solid
Salin selepas log masuk

Kemudian kita perlu menambah Babel-Preset-Solid ke fail konfigurasi Babel, Webpack atau Rollup kami:

 "Pratetap": ["pepejal"]
Salin selepas log masuk

Atau, jika anda ingin menyediakan aplikasi kecil, anda juga boleh menggunakan salah satu templat mereka:

 # Buat aplikasi kecil dari templat pepejal npx degit solidjs/templates/js my-app

# Tukar ke CD Direktori Projek My-App

# Pasang kebergantungan npm i # atau benang atau pnpm

# Mulakan pelayan pembangunan NPM Run Dev
Salin selepas log masuk

Typescript disokong, jika anda ingin memulakan projek TypeScript, tukar arahan pertama ke npx degit solidjs/templates/ts my-app .

Buat dan membuat komponen

Sintaks komponen rendering adalah serupa dengan react.js, jadi ia mungkin kelihatan biasa:

 import {render} dari "pepejal-js/web";

const hellomessage = props =><div> Hello {props.name}</div> ;

membuat (
  () =><hellomessage name="Taylor"></hellomessage> ,
  document.getElementById ("Hello-example")
);
Salin selepas log masuk

Kita perlu mengimport fungsi render terlebih dahulu, kemudian buat div dengan teks dan prop, dan panggil render, lulus dalam komponen dan elemen kontena.

Kod ini kemudian disusun menjadi ungkapan DOM sebenar. Sebagai contoh, contoh kod di atas, sekali disusun oleh pepejal, kelihatan seperti ini:

 import {render, template, sisipan, createComponent} dari "pepejal-js/web";

const _tmpl $ = template (`<div> Helo</div> `);

const hellomessage = props => {
  const _el $ = _tmpl $ .clonenode (true);
  masukkan (_el $, () => props.name);
  kembali _el $;
};

membuat (
  () => createComponent (Hellomessage, {name: "taylor"}),
  document.getElementById ("Hello-example")
);
Salin selepas log masuk

Taman permainan pepejal sangat sejuk, ia menunjukkan bahawa pepejal mempunyai kaedah rendering yang berbeza, termasuk klien, pelayan dan klien dengan penghidratan.

Gunakan isyarat untuk mengesan nilai yang berubah

Pepejal menggunakan cangkuk yang dipanggil createSignal , yang mengembalikan dua fungsi: getter dan setter. Ini mungkin kelihatan sedikit pelik jika anda biasa menggunakan kerangka seperti React.js. Anda biasanya mengharapkan elemen pertama menjadi nilai itu sendiri;

Sebagai contoh, jika kita menulis kod berikut:

 const [todos, addTodos] = createSignal ([]);
Salin selepas log masuk

Rakaman todos tidak mengembalikan nilai, tetapi fungsi. Jika kita mahu menggunakan nilai, kita perlu memanggil fungsi tersebut, seperti todos() .

Untuk senarai tugasan kecil, ini akan:

 import {createSignal} dari "pepejal-js";

const todolist = () => {
  biarkan input;
  const [todos, addTodos] = createSignal ([]);

  const addToDo = value => {
    kembali addTodos ([... todos (), nilai]);
  };

  Kembali (
    <h1 id="Untuk-membuat-senarai">Untuk membuat senarai:</h1>
    <input type="text" ref="{el"> input = el} />
    <button onclick="{()"> addToDo (input.value)}> Tambah item</button>
    
Salin selepas log masuk
    {todos (). MAP (item => (
  • {item}
  • ))}
); };

Contoh kod di atas akan memaparkan medan teks, dan selepas mengklik butang "Tambah Projek", todo akan dikemas kini dengan projek baru dan ia akan dipaparkan dalam senarai.

Ini mungkin kelihatan sangat mirip dengan menggunakan useState , jadi apakah perbezaan antara menggunakan getter? Pertimbangkan contoh kod berikut:

 console.log ("Buat isyarat");
const [firstName, setFirstName] = createSignal ("Whitney");
const [lastName, setLastName] = createSignal ("Houston");
const [DisplayFullName, setDisplayFulLName] = createSignal (true);

const displayName = createMemo (() => {
  jika (! DisplayFulLName ()) kembali firstName ();
  kembali `$ {firstName ()} $ {lastName ()}`;
});

createEffect (() => console.log ("nama saya", displayName ()));

console.log ("Set showfullName: false");
setDisplayfulLName (false);

Console.log ("Tukar LastName");
setLastName ("boop");

Console.log ("Set ShowfullName: True");
setDisplayfulLName (benar);
Salin selepas log masuk

Menjalankan kod di atas akan mendapat:

 <code>Create Signals My name is Whitney Houston Set showFullName: false My name is Whitney Change lastName Set showFullName: true My name is Whitney Boop</code>
Salin selepas log masuk

Titik utama yang perlu diperhatikan ialah selepas menetapkan nama terakhir baru, "Nama saya ..." tidak direkodkan. Ini kerana tiada apa yang mendengar perubahan pada lastName() pada ketika ini. Nilai baru displayFullName() ditetapkan hanya apabila nilai perubahan displayName() , itulah sebabnya apabila setShowFullName ditetapkan kepada benar, kita dapat melihat bahawa nama terakhir baru dipaparkan.

Ini memberikan kita cara yang lebih selamat untuk mengesan kemas kini nilai.

Primitif responsif

Dalam contoh kod terakhir, saya memperkenalkan createSignal , dan terdapat beberapa primitif lain: createEffect dan createMemo .

createeffect

createEffect menjejaki kebergantungan dan berjalan selepas setiap rendering perubahan ketergantungan.

 // Jangan lupa untuk mengimportnya terlebih dahulu menggunakan 'import {createeffect} dari "pepejal-js";'

createEffect (() => {
  console.log ("Count berada di", kiraan ());
});
Salin selepas log masuk

Setiap kali nilai count() berubah, "kiraan berada di ..." akan direkodkan

creatememo

createMemo mencipta isyarat baca sahaja yang mengira semula nilainya apabila kebergantungan kod yang dilaksanakan dikemas kini. Ia boleh digunakan apabila anda ingin cache beberapa nilai dan mengaksesnya tanpa menilai semula mereka (sehingga perubahan ketergantungan).

Sebagai contoh, jika kita mahu memaparkan kaunter 100 kali dan mengemas kini nilai apabila butang diklik, menggunakan createMemo akan membolehkan pengiraan semula berlaku hanya sekali setiap klik:

 kaunter fungsi () {
  const [count, setCount] = createSignal (0);
  // ia akan dipanggil 100 kali tanpa membuat pembungkusMemo counter // const counter = () => {
  // kiraan kembali ();
  //}

  // kaunter pembalut dengan creatememo, hanya dipanggil sekali setiap kemas kini // jangan lupa menggunakan 'import {createememo} dari "pepejal-js";'

  Kembali (
    <div>
      <button onclick="{()"> setCount (count () 1)}> count: {count ()}</button>
      <div>1. {Counter ()}</div>
      <div>2. {Counter ()}</div>
      <div>3. {Counter ()}</div>
      <div>4. {Counter ()}</div>
    </div>
  );
}
Salin selepas log masuk

Kaedah kitaran hayat

Pepejal mendedahkan beberapa kaedah kitaran hayat, seperti onMount , onCleanup , dan onError . Jika kita mahu beberapa kod dijalankan selepas rendering awal, kita perlu menggunakan onMount :

 // Jangan lupa untuk mengimportnya terlebih dahulu menggunakan 'import {onmount} dari "pepejal-js";'
  console.log ("Saya dipasang!");
});
Salin selepas log masuk

onCleanup adalah serupa dengan componentDidUnmount dalam React - ia berjalan apabila pengiraan semula skop responsif.

onError dilaksanakan apabila ralat berlaku di subscope yang paling terkini. Sebagai contoh, apabila pengambilalihan data gagal, kita boleh menggunakannya.

penyimpanan

Untuk membuat kedai untuk data, pepejal mendedahkan createStore , yang nilai pulangannya adalah objek proksi baca sahaja dan fungsi setter.

Sebagai contoh, jika kita menukar contoh tugas kita untuk menggunakan storan dan bukannya keadaan, ia akan kelihatan seperti ini:

 const [todos, addTodos] = createStore ({list: []});

createEffect (() => {
  console.log (todos.list);
});

onMount (() => {
  addTodos ('senarai', (senarai) => [... senarai, {item: "item todo baru", selesai: false}]);
});
Salin selepas log masuk

Contoh kod di atas akan mula merakam objek proksi dengan array kosong, dan kemudian merakam objek proksi dengan array yang mengandungi objek {item: "a new todo item", completed: false} .

Harus diingat bahawa jika sifatnya tidak diakses, objek negara peringkat atas tidak dapat dikesan - itulah sebabnya kami log todos.list bukannya todos .

Jika kita hanya merekodkan todos dalam createEffect , kita akan melihat nilai awal senarai, tetapi kita tidak akan melihat nilai yang dikemas kini di onMount .

Untuk menukar nilai di kedai, kami boleh mengemas kini mereka menggunakan fungsi tetapan yang ditakrifkan apabila menggunakan createStore . Sebagai contoh, jika kita ingin mengemas kini item senarai tugasan untuk "selesai", kita boleh mengemas kini storan dengan cara ini:

 const [todos, settodos] = createStore ({
  Senarai: [{Item: "Item Baru", Selesai: False}]
});

const markascomplete = text => {
  settodos (
    "Senarai",
    (i) => i.item === teks,
    "Selesai",
    (c) =>! C.
  );
};

Kembali (
  <button onclick="{()"> markascomplete ("item baru")}> tanda sebagai lengkap</button>
);
Salin selepas log masuk

Aliran kawalan

Untuk mengelakkan membuang semua nod DOM dicipta setiap kali mereka dikemas kini apabila menggunakan kaedah seperti .map() , pepejal membolehkan kami menggunakan pembantu templat.

Sebahagian daripadanya boleh didapati, seperti For untuk gelung melalui projek, Show untuk menunjukkan dan menyembunyikan unsur -unsur, Switch dan Match untuk memaparkan unsur -unsur yang sepadan dengan keadaan tertentu, dan sebagainya!

Berikut adalah beberapa contoh yang menunjukkan cara menggunakannya:

<for each="{todos.list}" fallback="{<div"> Memuatkan ... }>
  {(item) =><div> {item}</div> }
</for>
<show when="{todos.list[0]?.completed}" fallback="{<div"> Memuatkan ... }>
  <div>Item pertama selesai</div>
</show>
<switch fallback="{<div"> Tiada barang }>
  <match when="{todos.list[0]?.completed}"><completedlist></completedlist></match>
  <match when="{!todos.list[0]?.completed}"><todolist></todolist></match>
</switch>
Salin selepas log masuk

Projek Demo

Berikut adalah pengenalan cepat kepada asas -asas pepejal. Jika anda ingin mencubanya, saya membuat projek starter yang anda boleh menggunakan secara automatik untuk meniup dan mengklon ke github anda dengan mengklik butang di bawah!

[Butang yang digunakan untuk Netlify hendaklah dimasukkan di sini, tidak disediakan dalam teks asal] Projek ini termasuk tetapan lalai untuk projek pepejal, serta contoh aplikasi tugasan untuk konsep asas yang saya nyatakan dalam siaran ini untuk membantu anda memulakan!

Rangka kerja ini lebih banyak daripada apa yang saya tutupi di sini, jadi jangan ragu untuk menyemak dokumentasi untuk maklumat lanjut!

Atas ialah kandungan terperinci Pengenalan kepada Perpustakaan JavaScript Pepejal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bekerja dengan Caching Graphql Bekerja dengan Caching Graphql Mar 19, 2025 am 09:36 AM

Sekiranya anda baru -baru ini mula bekerja dengan GraphQL, atau mengkaji semula kebaikan dan keburukannya, anda tidak akan ragu -ragu mendengar perkara seperti "Graphql tidak menyokong caching" atau

Membina aplikasi Ethereum menggunakan redwood.js dan fauna Membina aplikasi Ethereum menggunakan redwood.js dan fauna Mar 28, 2025 am 09:18 AM

Dengan pendakian harga bitcoin baru -baru ini lebih dari 20k $ USD, dan baru -baru ini melanggar 30k, saya fikir ia patut mengambil menyelam yang mendalam kembali ke dalam mewujudkan Ethereum

Membuat Bragdoc anda sendiri dengan sebelas Membuat Bragdoc anda sendiri dengan sebelas Mar 18, 2025 am 11:23 AM

Tidak kira tahap tahap anda sebagai pemaju, tugas yang kami selesaikan -sama ada besar atau kecil -membuat kesan besar dalam pertumbuhan peribadi dan profesional kami.

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

Ia &#039; s! Tahniah kepada pasukan Vue untuk menyelesaikannya, saya tahu ia adalah usaha besar dan lama datang. Semua dokumen baru juga.

Bolehkah anda mendapatkan nilai harta CSS yang sah dari penyemak imbas? Bolehkah anda mendapatkan nilai harta CSS yang sah dari penyemak imbas? Apr 02, 2025 pm 06:17 PM

Saya mempunyai seseorang yang menulis dengan soalan yang sangat legit ini. Lea hanya blog tentang bagaimana anda boleh mendapatkan sifat CSS yang sah dari penyemak imbas. That &#039; s seperti ini.

Sedikit di CI/CD Sedikit di CI/CD Apr 02, 2025 pm 06:21 PM

Saya &#039;

Kad yang disusun dengan kedudukan melekit dan sasaran sass Kad yang disusun dengan kedudukan melekit dan sasaran sass Apr 03, 2025 am 10:30 AM

Pada hari yang lain, saya melihat sedikit ini sangat indah dari laman web Corey Ginnivan di mana koleksi kad timbunan di atas satu sama lain semasa anda menatal.

Membandingkan penyemak imbas untuk reka bentuk responsif Membandingkan penyemak imbas untuk reka bentuk responsif Apr 02, 2025 pm 06:25 PM

Terdapat beberapa aplikasi desktop ini di mana matlamat menunjukkan laman web anda pada dimensi yang berbeza pada masa yang sama. Oleh itu, anda boleh menulis

See all articles