如何理解 redux
redux原理
某公司有物流(actionType)、电商(actionType)、广告(actionType)3块业务,在公司财务系统(state)统一记录着三块业务分别赚取到的资金。某天,电商业务在公司电商平台销售了价值100w的商品(action),赚取到的资金通过发票(dispatch)的形式送到业务的财务部门,财务部门通过自己业务块,计算赚取到的利润(reducer),再更新到财务系统(state)。
核心原理: 通过某个事件action把结果通过dispatch发送到reducer,在reducer中,根据不同的actionType对数据做不同的业务处理,然后把最后的结果更新到state树中。
由于的几位老板对公司的资金盯着很紧,要时刻关注资金的变化,于是,就设置了当资金有变动事件(subscribe),就发短信告诉他(listener)。
原理:redux通过内置了一个listeners数组,允许外部订阅state数据变动事件,当state树种的数据发生变化,就会通知所有的监听事件。
API 讲解
function createStore(reducer, preloadedState, enhancer)
createStore方法中,初始化了整个redux环境。preloadedState作为state树的初始值。此方法返回了redux开放的接口,操作redux的state,只能通过返回来的api去操作。
createStore返回返回来的api:
return { dispatch, subscribe, getState, replaceReducer, [$$observable]: observable }
store.getState: 返回当前redux维护的state对象;
store.subscribe: 可以通过此接口注册订阅事件,即当redux的state被访问时(不管有没有修改到state的数据),redux就会遍历所有已注册的事件。
function subscribe(listener) { if (typeof listener !== 'function') { throw new Error('Expected listener to be a function.') } let isSubscribed = true ensureCanMutateNextListeners() nextListeners.push(listener) return function unsubscribe() { if (!isSubscribed) { return } isSubscribed = false ensureCanMutateNextListeners() const index = nextListeners.indexOf(listener) nextListeners.splice(index, 1) } }
store.dispatch: 在事件action运行后,通过dispatch把结果推送到reducer中。action的结果必须为普通的js对象,并且必须包含一个type属性,在reducer中可以根据type去对数据做不同的业务处理,然后更新到相应的state。
在reducer之后,无论数据有没有发生变化,都会遍历所有的监听事件。
function dispatch(action) { if (!isPlainObject(action)) { throw new Error( 'Actions must be plain objects. ' + 'Use custom middleware for async actions.' ) } if (typeof action.type === 'undefined') { throw new Error( 'Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?' ) } if (isDispatching) { throw new Error('Reducers may not dispatch actions.') } try { isDispatching = true currentState = currentReducer(currentState, action) } finally { isDispatching = false } const listeners = currentListeners = nextListeners for (let i = 0; i < listeners.length; i++) { const listener = listeners[i] listener() } return action }
整个单页面应用仅需调用1次createStore方法,然后确保初始化后的对象全局可用,这样才能达到通过redux来统一管理数据。
Atas ialah kandungan terperinci 如何理解 redux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apakah prospek pekerjaan farmasi klinikal di Universiti Perubatan Harbin Walaupun situasi pekerjaan negara tidak optimistik, graduan farmaseutikal masih mempunyai prospek pekerjaan yang baik. Secara keseluruhannya, bekalan graduan farmaseutikal adalah kurang daripada permintaan Syarikat farmaseutikal dan kilang farmaseutikal adalah saluran utama untuk menyerap graduan tersebut. Menurut laporan, dalam beberapa tahun kebelakangan ini, nisbah bekalan-permintaan untuk pelajar siswazah dalam jurusan seperti persediaan farmaseutikal dan kimia perubatan semula jadi telah mencapai 1:10. Arah pekerjaan jurusan farmasi klinikal: Selepas tamat pengajian, pelajar jurusan perubatan klinikal boleh melibatkan diri dalam rawatan perubatan, pencegahan, penyelidikan perubatan, dsb. dalam unit perubatan dan kesihatan, penyelidikan perubatan dan jabatan lain. Jawatan pekerjaan: Wakil perubatan, wakil jualan farmaseutikal, wakil jualan, pengurus jualan, pengurus jualan wilayah, pengurus pelaburan, pengurus produk, pakar produk, jururawat

Pemahaman mendalam tentang penggunaan paip Linux Dalam sistem pengendalian Linux, paip adalah fungsi yang sangat berguna yang boleh menggunakan output satu arahan sebagai input bagi arahan lain, dengan itu mudah merealisasikan pelbagai pemprosesan dan operasi data yang kompleks. Pemahaman mendalam tentang cara paip Linux digunakan adalah sangat penting untuk pentadbir dan pembangun sistem. Artikel ini akan memperkenalkan konsep asas saluran paip dan menunjukkan cara menggunakan saluran paip Linux untuk pemprosesan dan operasi data melalui contoh kod tertentu. 1. Konsep asas paip dalam Linux

Tutorial ReactRedux: Cara Mengurus Keadaan Bahagian Depan dengan Redux React ialah perpustakaan JavaScript yang sangat popular untuk membina antara muka pengguna. Dan Redux ialah perpustakaan JavaScript untuk mengurus keadaan aplikasi. Bersama-sama mereka membantu kami mengurus keadaan bahagian hadapan dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan Redux untuk mengurus keadaan dalam aplikasi React dan memberikan contoh kod khusus. 1. Pasang dan sediakan Redux Mula-mula, kita perlu memasang Re

Cara memahami kaedah lulus nilai dengan betul dalam PHP PHP ialah bahasa skrip yang digunakan secara meluas dalam pembangunan Web, dan kaedah lulus parameter dalam PHP terutamanya termasuk lulus nilai dan lulus rujukan. Dan memahami bagaimana nilai dihantar dalam PHP adalah penting untuk menulis kod yang cekap. Artikel ini akan membincangkan kaedah lulus nilai dalam PHP secara terperinci dan menggunakan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. Konsep asas kaedah lulus nilai adalah untuk menyalin nilai pembolehubah dan menghantarnya kepada fungsi atau kaedah Operasi pada nilai dalam fungsi tidak akan menjejaskannya.

Komen adalah bahagian yang sangat penting dalam pengaturcaraan Go. Komen boleh membantu pengaturcara lebih memahami logik, tujuan dan butiran kod, dengan itu meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Artikel ini akan memperkenalkan kepentingan ulasan dalam bahasa Go dan menggabungkannya dengan contoh kod khusus untuk menggambarkan cara ulasan membantu pemahaman kod. Mula-mula, mari lihat contoh program Go yang mudah: packagemainimport "fmt" funcmain(){/

Untuk memahami rentetan secara mendalam. Fungsi split dalam dokumentasi bahasa Go, contoh kod khusus diperlukan Dalam bahasa Go, operasi rentetan adalah keperluan yang sangat biasa. Antaranya, pakej rentetan ialah pakej standard yang disediakan oleh bahasa Go dan menyediakan pelbagai fungsi pemprosesan rentetan. Antaranya, strings.Split function adalah salah satu fungsi yang biasa digunakan. Sebelum kita menyelam secara rasmi ke dalam rentetan. Fungsi Split,

Memandangkan kerumitan aplikasi web moden terus meningkat, logik kod menjadi semakin kompleks. Untuk menyelesaikan masalah ini, perisian tengah menjadi semakin popular dalam pembangunan web moden. ThinkPHP6 ialah rangka kerja PHP popular yang turut menyokong perisian tengah. Dalam artikel ini, kita akan membincangkan asas dan kegunaan praktikal perisian pertengahan ThinkPHP6. Apakah middleware? Dalam pembangunan web, middleware merujuk kepada cara memproses permintaan dan respons HTTP. Apabila pelanggan menghantar permintaan kepada pelayan,

Baru-baru ini, beberapa rakan melaporkan cara memuat turun fail imej win10 Kerana terdapat banyak fail imej di pasaran, apakah yang perlu saya lakukan jika saya ingin mencari fail biasa untuk dimuat turun? Hari ini, editor telah membawakan anda pautan untuk memuat turun imej dan langkah penyelesaian terperinci Mari kita lihat bersama-sama. muat turun pantas imej win10 dan pautan muat turun tutorial pemasangan >>> Sistem Home Ghostwin101909 imej versi 64-bit v2019.11<<<>>>Imej Win10 64-bit v2019.07<<<>>>Imej Win10 32-bit v2019. 07<< <1. Cari melalui Internet
