Jadual Kandungan
reducer sebagai fungsi tulen
Fungsi Reducer Test
Mengintegrasikan semua kandungan
Kesimpulan
Rumah hujung hadapan web tutorial js Menyelam jauh ke redux

Menyelam jauh ke redux

Feb 14, 2025 am 10:13 AM

A Deep Dive into Redux

mata teras

    Redux memudahkan pengurusan negeri dalam aplikasi moden dengan bertindak sebagai bekas negara yang boleh diramal, yang penting untuk mengekalkan kestabilan permohonan apabila ia berskala.
  • Integrasi TypeScript meningkatkan redux dengan memaksa keselamatan jenis, yang menambah lapisan ramalan dan membantu mengekalkan pangkalan kod besar dengan memudahkan refactoring.
  • Reducer di Redux direka sebagai fungsi tulen untuk memastikan ia tidak mempunyai kesan sampingan, dengan itu meningkatkan kebolehlaksanaan dan kebolehpercayaan pengurusan negara.
  • Gunakan jest untuk memudahkan ujian unit, jest berfungsi dengan lancar dengan typescript untuk menguji tindakan redux dan pengurangan, memastikan bahawa setiap komponen berfungsi seperti yang diharapkan.
  • Artikel ini menunjukkan pelaksanaan sebenar Redux dengan membina enjin gaji, menunjukkan bagaimana Redux menguruskan peralihan negara dan berurusan dengan kesan sampingan dalam senario aplikasi sebenar.
Membina permohonan moden yang negara adalah tugas yang kompleks. Apabila keadaan berubah, aplikasi itu menjadi tidak dapat diramalkan dan sukar untuk dikekalkan. Di sinilah Redux masuk. Redux adalah perpustakaan ringan untuk mengendalikan keadaan. Fikirkannya sebagai mesin negara.

Dalam artikel ini, saya akan meneroka bekas negara Redux dengan mendalam dengan membina enjin pemprosesan gaji. Aplikasi ini akan menyimpan gaji bersama -sama dengan semua tambahan seperti bonus dan pilihan saham. Saya akan menggunakan JavaScript Pure dan Typescript untuk pemeriksaan jenis untuk memastikan penyelesaiannya mudah. Oleh kerana Redux sangat mudah untuk diuji, saya juga akan menggunakan JEST untuk mengesahkan permohonan.

Dalam tutorial ini, saya menganggap anda mempunyai pemahaman tentang JavaScript, Node, dan NPM.

Pertama, anda boleh memulakan aplikasi ini dengan NPM:

npm init
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Apabila meminta arahan ujian, terus gunakan JEST. Ini bermakna bahawa NPM T akan memulakan jest dan menjalankan semua ujian unit. Fail utama akan menjadi index.js untuk memastikannya mudah. Jangan ragu untuk menjawab soalan NPM Init yang lain.

Saya akan menggunakan TypeScript untuk melakukan pemeriksaan jenis dan menentukan model data. Ini membantu mengkonseptualisasikan apa yang kita cuba bina.

untuk memulakan dengan TypeScript:

npm i typescript --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Saya akan meletakkan beberapa kebergantungan dalam aliran kerja pembangunan dalam kebencian. Ini jelas menunjukkan kebergantungan yang disediakan untuk pemaju dan kebergantungan yang akan digunakan dalam persekitaran pengeluaran. Setelah TypeScript siap, tambahkan skrip permulaan dalam pakej.json:

"start": "tsc && node .bin/index.js"
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Buat fail index.ts di bawah folder SRC. Ini memisahkan fail sumber dari seluruh projek. Sekiranya anda memulakan NPM, penyelesaiannya tidak akan dilaksanakan. Ini kerana anda perlu mengkonfigurasi TypeScript.

Buat fail tsconfig.json dengan konfigurasi berikut:

{
  "compilerOptions": {
    "strict": true,
    "lib": ["esnext", "dom"],
    "outDir": ".bin",
    "sourceMap": true
  },
  "files": [
    "src/index"
  ]
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Saya boleh meletakkan konfigurasi ini dalam hujah baris arahan TSC. Sebagai contoh, TSC SRC/INDEX.TS -Strict .... tetapi meletakkan semua ini dalam fail berasingan jauh lebih jelas. Perhatikan bahawa skrip permulaan dalam pakej.json hanya memerlukan arahan TSC.

Berikut adalah beberapa pilihan pengkompil yang munasabah yang akan memberi kita titik permulaan yang baik dan apakah setiap pilihan bermakna:

  • ketat: Dayakan semua pilihan pemeriksaan jenis yang ketat, iaitu -noimplicitany, --trictnullchecks, dll.
  • lib: Senarai fail perpustakaan yang termasuk dalam disusun.
  • Outlyir: Gariskan output ke direktori ini.
  • Sourcemap: Menjana fail peta sumber untuk debugging.
  • Fail: Fail input yang diberikan kepada pengkompil.

kerana saya akan menggunakan jest untuk ujian unit, saya akan terus menambahkannya:

npm init
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

TS-Jest Dependency menambah pemeriksaan jenis untuk rangka kerja ujian. Satu perkara yang perlu diperhatikan adalah untuk menambah konfigurasi jest dalam pakej.json:

npm i typescript --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ini membolehkan rangka kerja ujian untuk mengambil fail TypeScript dan mengetahui cara menukarnya. Ciri yang bagus ialah anda boleh melakukan pemeriksaan jenis semasa menjalankan ujian unit. Untuk memastikan projek ini siap, buat folder __Tests__ yang mengandungi fail index.test.ts. Kemudian, pemeriksaan sanitasi dilakukan. Contohnya:

"start": "tsc && node .bin/index.js"
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Sekarang laksanakan permulaan NPM dan NPM T tidak akan menyebabkan sebarang kesilapan. Ini memberitahu kita bahawa kita kini boleh memulakan penyelesaian bangunan. Tetapi sebelum kita melakukan ini, mari tambahkan Redux ke projek:

{
  "compilerOptions": {
    "strict": true,
    "lib": ["esnext", "dom"],
    "outDir": ".bin",
    "sourceMap": true
  },
  "files": [
    "src/index"
  ]
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Ketergantungan ini akan digunakan dalam persekitaran pengeluaran. Oleh itu, tidak perlu memasukkannya dengan--save-dev. Jika anda menyemak pakej.json anda, ia akan berada dalam kebergantungan.

enjin paystop dalam operasi sebenar

Enjin gaji akan mengandungi yang berikut: upah, pembayaran balik, bonus dan pilihan saham. Di Redux, anda tidak boleh mengemas kini status secara langsung. Sebaliknya, tindakan dijadualkan untuk memberitahu penyimpanan sebarang perubahan baru.

jadi ini meninggalkan jenis operasi berikut:

npm i jest ts-jest @types/jest @types/node --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Jenis Operasi Pay_day boleh digunakan untuk mengeluarkan cek pada hari gaji dan trek sejarah gaji. Jenis operasi ini membimbing seluruh reka bentuk kerana kami menyempurnakan enjin gaji. Mereka menangkap peristiwa dalam kitaran hayat negeri, seperti menetapkan jumlah gaji asas. Peristiwa tindakan ini boleh dilampirkan pada sebarang kandungan, sama ada peristiwa klik atau kemas kini data. Jenis operasi Redux adalah abstrak tentang mana penjadualan datang. Bekas status boleh dijalankan pada klien dan/atau pada pelayan.

TypeScript

Menggunakan teori jenis, saya akan menentukan model data berdasarkan data keadaan. Bagi setiap operasi gaji, seperti jenis operasi dan jumlah pilihan. Jumlahnya adalah pilihan kerana Pay_day tidak memerlukan dana untuk memproses gaji. Maksud saya, ia boleh mengenakan caj pelanggan, tetapi mengabaikannya sekarang (mungkin diperkenalkan dalam edisi kedua).

Sebagai contoh, masukkannya dalam src/index.ts:

"jest": {
  "preset": "ts-jest"
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Untuk status gaji, kita memerlukan atribut untuk gaji asas, bonus, dll. Kami juga akan menggunakan status ini untuk mengekalkan sejarah gaji.

Antara muka TypeScript ini harus dilakukan:

npm init
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Bagi setiap harta, perhatikan bahawa TypeScript menggunakan kolon untuk menentukan jenis. Sebagai contoh,: nombor. Ini menentukan kontrak jenis dan menambah kebolehprediksi kepada pemeriksa jenis. Redux boleh dipertingkatkan menggunakan sistem jenis dengan pengisytiharan jenis eksplisit. Ini kerana bekas negara Redux dibina untuk tingkah laku yang boleh diramal.

Idea ini tidak gila atau radikal. Pembelajaran Redux Bab 1 (ahli Premium SitePoint sahaja) menerangkan ini dengan baik.

Apabila perubahan aplikasi, pemeriksaan taip menambah ramalan tambahan. Apabila aplikasi berkembang, teori jenis juga membantu memudahkan pembinaan semula segmen kod besar.

menggunakan enjin konseptualisasi jenis sekarang membantu membuat fungsi operasi berikut:

npm i typescript --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Perkara yang baik ialah jika anda cuba melakukan ProcessBasePay ('ABC'), pemeriksa jenis akan memberi amaran kepada anda. Memusnahkan kontrak jenis mengurangkan kebolehprediksi bekas negara. Saya menggunakan kontrak operasi tunggal seperti PayrollAction untuk menjadikan pemproses gaji lebih diramalkan. Ambil perhatian bahawa jumlahnya ditetapkan dalam objek Operasi melalui singkatan atribut ES6. Pendekatan yang lebih tradisional adalah jumlah: jumlah, yang lebih verbose. Fungsi anak panah, seperti () = & gt;

reducer sebagai fungsi tulen

Fungsi reducer memerlukan parameter keadaan dan operasi. Negeri harus mempunyai keadaan awal dengan nilai lalai. Jadi, bolehkah anda bayangkan keadaan awal kita? Saya fikir ia perlu bermula dari awal dengan senarai sejarah gaji kosong.

Contoh:

"start": "tsc && node .bin/index.js"
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Pemeriksa jenis memastikan bahawa ini adalah nilai yang betul kepunyaan objek ini. Dengan keadaan awal, mula membuat fungsi reducer:

{
  "compilerOptions": {
    "strict": true,
    "lib": ["esnext", "dom"],
    "outDir": ".bin",
    "sourceMap": true
  },
  "files": [
    "src/index"
  ]
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
redux reducer mempunyai corak di mana semua jenis operasi diproses oleh penyataan suis. Tetapi sebelum meleleh melalui semua kes suis, saya akan membuat pembolehubah tempatan yang boleh diguna semula:

npm i jest ts-jest @types/jest @types/node --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Perhatikan bahawa jika anda tidak mengubah keadaan global, anda boleh mengubah pembolehubah tempatan. Saya menggunakan pengendali LET untuk menyampaikan bahawa pembolehubah ini akan berubah pada masa akan datang. Mengubah keadaan global (seperti parameter negeri atau operasi) boleh menyebabkan pengurangan menjadi tidak suci. Paradigma berfungsi ini penting kerana fungsi reducer mesti disimpan murni. JavaScript dari Newbie ke Ninja Bab 11 (ahli SitePoint Premium sahaja).

Mulakan pernyataan suis pengurangan untuk mengendalikan kes penggunaan pertama:

"jest": {
  "preset": "ts-jest"
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Saya menggunakan pengendali REST ES6 untuk memastikan harta negara tidak berubah. Sebagai contoh, ... Negeri. Anda boleh menulis ganti sebarang atribut selepas pengendali lain dalam objek baru. Basepay berasal dari dekonstruksi, yang sama seperti corak yang sepadan dalam bahasa lain. Fungsi ComputeToTalPay ditetapkan seperti berikut:

it('is true', () => {
  expect(true).toBe(true);
});
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Sila ambil perhatian bahawa anda akan memotong stok stok kerana wang itu akan digunakan untuk membeli stok syarikat. Katakan anda ingin berurusan dengan pembayaran balik:

npm init
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Oleh kerana jumlahnya adalah pilihan, pastikan ia mempunyai nilai lalai untuk mengurangkan kegagalan. Ini adalah kelebihan TypeScript, kerana pemeriksa jenis akan melihat perangkap ini dan memberi amaran kepada anda. Sistem jenis tahu fakta tertentu, jadi ia boleh membuat andaian yang munasabah. Katakan anda ingin berurusan dengan bonus:

npm i typescript --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Mod ini menjadikan reducer boleh dibaca kerana ia hanya mengekalkan keadaan. Anda mendapat jumlah operasi, hitung jumlah gaji, dan buat teks objek baru. Tidak ada yang berbeza ketika berurusan dengan pilihan saham:

"start": "tsc && node .bin/index.js"
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Untuk memproses gaji pada hari gaji, ia memerlukan pemadaman bonus dan pembayaran balik. Kedua -dua atribut ini tidak disimpan di negeri ini dalam setiap gaji. Dan, tambahkan kemasukan ke sejarah gaji. Upah asas dan pilihan saham boleh disimpan di negeri ini kerana mereka tidak sering berubah. Dengan itu, ini adalah bagaimana Pay_day dikendalikan:

{
  "compilerOptions": {
    "strict": true,
    "lib": ["esnext", "dom"],
    "outDir": ".bin",
    "sourceMap": true
  },
  "files": [
    "src/index"
  ]
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam array seperti NewPayHistory, gunakan pengendali lanjutan, yang merupakan antonim untuk berehat. Tidak seperti harta benda dalam objek koleksi, ia memperluaskan projek. Sebagai contoh, [... payhistory]. Walaupun kedua -dua pengendali kelihatan sama, mereka tidak sama. Tonton dengan teliti, kerana ini mungkin muncul dalam soalan wawancara.

menggunakan pop () untuk payhistory tidak akan mengubah keadaan. Kenapa? Kerana Slice () mengembalikan array baru. Array dalam JavaScript disalin dengan rujukan. Menetapkan array ke pembolehubah baru tidak mengubah objek yang mendasari. Oleh itu, penjagaan mesti diambil semasa berurusan dengan jenis objek ini.

Kerana lastPayHistory mungkin tidak ditentukan, saya menggunakan nilai null lelaki miskin untuk memulakannya kepada sifar. Sila ambil perhatian bahawa (O && O.Property) || Mungkin ada cara yang lebih elegan untuk melakukan ini dalam versi masa depan JavaScript atau bahkan TypeScript.

Setiap pengurangan redux mesti menentukan cawangan lalai. Untuk memastikan bahawa Negeri tidak menjadi tidak jelas:

npm i jest ts-jest @types/jest @types/node --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Fungsi Reducer Test

Salah satu daripada banyak manfaat menulis fungsi tulen ialah mereka mudah diuji. Ujian unit adalah ujian di mana anda perlu mengharapkan tingkah laku yang boleh diramal, dan anda boleh mengautomasikan semua ujian sebagai sebahagian daripada binaan. Dalam __Tests __/index.test.ts, membatalkan ujian maya dan mengimport semua fungsi kepentingan:

"jest": {
  "preset": "ts-jest"
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Perhatikan bahawa semua fungsi ditetapkan untuk dieksport, jadi anda boleh mengimportnya. Untuk gaji asas, mulakan pengurangan enjin gaji dan uji:

it('is true', () => {
  expect(true).toBe(true);
});
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Redux menetapkan keadaan awal untuk tidak ditentukan. Oleh itu, adalah idea yang baik untuk memberikan nilai lalai dalam fungsi reducer. Bagaimana dengan pengendalian pembayaran balik?

npm i redux --save
Salin selepas log masuk
Salin selepas log masuk

Corak bonus pengendalian adalah sama seperti ini:

const BASE_PAY = 'BASE_PAY';
const REIMBURSEMENT = 'REIMBURSEMENT';
const BONUS = 'BONUS';
const STOCK_OPTIONS = 'STOCK_OPTIONS';
const PAY_DAY = 'PAY_DAY';
Salin selepas log masuk
Salin selepas log masuk

untuk pilihan saham:

interface PayrollAction {
  type: string;
  amount?: number;
}
Salin selepas log masuk
Salin selepas log masuk

Perhatikan bahawa apabila stockoptions lebih besar daripada totalpay, totalpay mesti kekal tidak berubah. Oleh kerana syarikat hipotetikal ini beretika, ia tidak mahu mengambil wang dari pekerjanya. Jika anda menjalankan ujian ini, sila ambil perhatian bahawa TotalPay ditetapkan kepada -10, kerana stok akan ditolak. Inilah sebabnya kami menguji kod! Mari kita selesaikan tempat di mana jumlah gaji dikira:

npm init
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Jika wang yang diperoleh oleh pekerja tidak mempunyai cukup wang untuk membeli saham syarikat, sila terus melangkau potongan. Juga, pastikan ia menetapkan semula stok ke sifar:

npm i typescript --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pembetulan ini menentukan sama ada mereka mempunyai cukup wang dalam NewStockOptions. Dengan ini, ujian unit berlalu, kod itu adalah bunyi dan bermakna. Kami boleh menguji kes penggunaan positif di mana terdapat cukup wang untuk membuat potongan:

"start": "tsc && node .bin/index.js"
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

untuk hari paydays, gunakan pelbagai status untuk menguji dan pastikan transaksi satu kali tidak berterusan:

{
  "compilerOptions": {
    "strict": true,
    "lib": ["esnext", "dom"],
    "outDir": ".bin",
    "sourceMap": true
  },
  "files": [
    "src/index"
  ]
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Perhatikan bagaimana saya menyesuaikan Oldstate untuk mengesahkan bonus dan menetapkan semula pembayaran balik kepada sifar.

Bagaimana dengan cawangan lalai dalam pengurangan?

npm i jest ts-jest @types/jest @types/node --save-dev
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

redux menetapkan jenis operasi seperti init_action pada mulanya. Kami hanya peduli sama ada pengurangan kami mempunyai beberapa set keadaan awal.

Mengintegrasikan semua kandungan

Pada ketika ini, anda mungkin mula tertanya -tanya jika Redux lebih banyak corak reka bentuk. Jika anda menjawab bahawa ia adalah corak dan perpustakaan ringan, anda betul. Dalam index.ts, import redux:

"jest": {
  "preset": "ts-jest"
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Contoh kod seterusnya boleh dibalut ini jika pernyataan. Ini adalah stopgap jadi ujian unit tidak bocor ke ujian integrasi:

it('is true', () => {
  expect(true).toBe(true);
});
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Saya tidak mengesyorkan melakukan ini dalam projek sebenar. Modul boleh diletakkan dalam fail berasingan untuk mengasingkan komponen. Ini menjadikannya lebih mudah dibaca dan tidak membocorkan masalah. Ujian unit juga mendapat manfaat daripada fakta bahawa modul berjalan secara bebas.

Gunakan PayrollEnginereducer untuk memulakan penyimpanan Redux:

npm i redux --save
Salin selepas log masuk
Salin selepas log masuk

setiap kedai.subscribe () mengembalikan fungsi berhenti berlangganan () berikutnya yang boleh digunakan untuk pembersihan. Ia berhenti melanggan panggilan balik apabila ia dijadualkan melalui storan. Di sini saya menggunakan Store.getState () untuk mengeluarkan keadaan semasa ke konsol.

Katakan pekerja memperoleh 300, mempunyai 50 pembayaran balik, 100 bonus, dan 15 untuk stok syarikat:

const BASE_PAY = 'BASE_PAY';
const REIMBURSEMENT = 'REIMBURSEMENT';
const BONUS = 'BONUS';
const STOCK_OPTIONS = 'STOCK_OPTIONS';
const PAY_DAY = 'PAY_DAY';
Salin selepas log masuk
Salin selepas log masuk

untuk menjadikannya lebih menyeronokkan, membuat 50 lagi pembayaran balik dan memproses gaji lain:

interface PayrollAction {
  type: string;
  amount?: number;
}
Salin selepas log masuk
Salin selepas log masuk

Akhirnya, jalankan gaji lain dan berhenti berlangganan untuk penyimpanan redux:

interface PayStubState {
  basePay: number;
  reimbursement: number;
  bonus: number;
  stockOptions: number;
  totalPay: number;
  payHistory: Array<PayHistoryState>;
}

interface PayHistoryState {
  totalPay: number;
  totalCompensation: number;
}
Salin selepas log masuk

Hasil akhir adalah seperti berikut:

export const processBasePay = (amount: number): PayrollAction =>
  ({type: BASE_PAY, amount});
export const processReimbursement = (amount: number): PayrollAction =>
  ({type: REIMBURSEMENT, amount});
export const processBonus = (amount: number): PayrollAction =>
  ({type: BONUS, amount});
export const processStockOptions = (amount: number): PayrollAction =>
  ({type: STOCK_OPTIONS, amount});
export const processPayDay = (): PayrollAction =>
  ({type: PAY_DAY});
Salin selepas log masuk

Seperti yang ditunjukkan, Redux mengekalkan keadaan, mengubah keadaan dan memberitahu pelanggan dalam pakej kecil yang kemas. Fikirkan Redux sebagai mesin negara, yang merupakan sumber sebenar data negara. Semua ini mengamalkan amalan terbaik pengekodan, seperti paradigma fungsional yang baik.

Kesimpulan

Redux menyediakan penyelesaian mudah kepada masalah pengurusan negara yang kompleks. Ia bergantung kepada paradigma berfungsi untuk mengurangkan ketidakpastian. Kerana reducer adalah fungsi tulen, ujian unit sangat mudah. Saya memutuskan untuk menggunakan JEST, tetapi sebarang rangka kerja ujian yang menyokong dakwaan asas akan berfungsi.

TypeScript menggunakan teori jenis untuk menambah lapisan perlindungan tambahan. Campurkan pemeriksaan jenis dengan pengaturcaraan berfungsi dan anda mendapat kod kukuh yang hampir tidak pernah terganggu. Paling penting, TypeScript tidak mendapat cara bekerja semasa menambah nilai. Jika anda perasan, sebaik sahaja kontrak jenis disediakan, hampir tidak ada pengekodan tambahan. Pemeriksa jenis melakukan selebihnya. Seperti mana -mana alat yang baik, TypeScript mengotomatisasi disiplin pengekodan sementara masih tidak kelihatan. Typescript menyalak dengan kuat, tetapi ia menggigit ringan.

Jika anda ingin mencuba projek ini (saya harap anda melakukan ini), anda boleh mencari kod sumber untuk artikel ini di GitHub.

Atas ialah kandungan terperinci Menyelam jauh ke redux. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Apa yang perlu saya lakukan jika saya menghadapi percetakan kod yang dihiasi untuk resit kertas terma depan? Apa yang perlu saya lakukan jika saya menghadapi percetakan kod yang dihiasi untuk resit kertas terma depan? Apr 04, 2025 pm 02:42 PM

Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Demystifying JavaScript: Apa yang berlaku dan mengapa penting Demystifying JavaScript: Apa yang berlaku dan mengapa penting Apr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Siapa yang dibayar lebih banyak Python atau JavaScript? Siapa yang dibayar lebih banyak Python atau JavaScript? Apr 04, 2025 am 12:09 AM

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Bagaimana untuk menggabungkan elemen array dengan ID yang sama ke dalam satu objek menggunakan JavaScript? Bagaimana untuk menggabungkan elemen array dengan ID yang sama ke dalam satu objek menggunakan JavaScript? Apr 04, 2025 pm 05:09 PM

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

Adakah JavaScript sukar belajar? Adakah JavaScript sukar belajar? Apr 03, 2025 am 12:20 AM

Pembelajaran JavaScript tidak sukar, tetapi ia mencabar. 1) Memahami konsep asas seperti pembolehubah, jenis data, fungsi, dan sebagainya. 2) Pengaturcaraan asynchronous tuan dan melaksanakannya melalui gelung acara. 3) Gunakan operasi DOM dan berjanji untuk mengendalikan permintaan tak segerak. 4) Elakkan kesilapan biasa dan gunakan teknik debugging. 5) Mengoptimumkan prestasi dan mengikuti amalan terbaik.

Bagaimana untuk mencapai kesan menatal paralaks dan kesan animasi elemen, seperti laman web rasmi Shiseido?
atau:
Bagaimanakah kita dapat mencapai kesan animasi yang disertai dengan menatal halaman seperti laman web rasmi Shiseido? Bagaimana untuk mencapai kesan menatal paralaks dan kesan animasi elemen, seperti laman web rasmi Shiseido? atau: Bagaimanakah kita dapat mencapai kesan animasi yang disertai dengan menatal halaman seperti laman web rasmi Shiseido? Apr 04, 2025 pm 05:36 PM

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

Evolusi JavaScript: Trend Semasa dan Prospek Masa Depan Evolusi JavaScript: Trend Semasa dan Prospek Masa Depan Apr 10, 2025 am 09:33 AM

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Perbezaan dalam Konsol.Log Output Result: Mengapa kedua -dua panggilan berbeza? Perbezaan dalam Konsol.Log Output Result: Mengapa kedua -dua panggilan berbeza? Apr 04, 2025 pm 05:12 PM

Perbincangan mendalam mengenai punca-punca utama perbezaan dalam output konsol.log. Artikel ini akan menganalisis perbezaan hasil output fungsi Console.log dalam sekeping kod dan menerangkan sebab -sebab di belakangnya. � ...

See all articles