Saya memiliki proyek non Bereaksi dengan kode berikut
.
_index.js_
import configureStore from 'js/store/configureStore'
/* Redux Imports */
import { createPage } from 'js/actions/page'
// Boot the App
document.addEventListener('DOMContentLoaded', function () {
const initialState = window.__INITIAL_STATE__
const pageId = window.__INITIAL_STATE__.page
const store = configureStore(initialState)
store.dispatch(createPage(pageId))
})
*actions/page.js*
function initPage (pageId) {
return {
type: 'CREATE_PAGE',
page: pageId
}
}
export function createPage (pageId) {
return dispatch => {
dispatch(initPage(pageId))
}
}
_reducers/page.js_
/**
* Page Mediators get imported here
* Page Mediators are brokers that hold page initialization.
* The bundle includes all page mediators but they will not be activated
* unless thre reducer calls them.
*/
import * as cart from 'js/templates/cart'
/**
* This is a edge case, index.js boots the app and we are subscribing to
* a Redux @<strong i="11">@INIT</strong> action instead of adding one more layer of actions
* which leads to unintended scenarios.
*/
const page = (state = {page: []} , action) => {
console.log(state)
switch (action.type) {
case '@<strong i="12">@INIT</strong>':
console.log('initializing page:' + state.id)
console.log(state)
dispatch({type: 'CREATE_PAGE',page: state.id})
cart.init()
return state
case 'CREATE_PAGE':
console.log('initializing page:' + state.id)
cart.init()
return state
default:
return state
}
}
export default page
Masalah yang saya miliki adalah actions/page.js
tidak pernah melihat tindakan CREATE_PAGE
. Ada pikiran?
Tidak berhubungan tapi
- Ini adalah kasus tepi, index.js mem-boot aplikasi dan kami berlangganan
- tindakan Redux @ @INIT alih-alih menambahkan satu lapisan tindakan lagi
- yang mengarah ke skenario yang tidak diinginkan.
dapat merusak aplikasi Anda setiap hari.
Kami secara khusus mengatakan :
- Ini adalah jenis tindakan pribadi yang disediakan oleh Redux.
- Untuk tindakan yang tidak diketahui, Anda harus mengembalikan status saat ini.
- Jika status saat ini tidak ditentukan, Anda harus mengembalikan status awal.
- Jangan merujuk jenis tindakan ini secara langsung dalam kode Anda.
Terima kasih @gaearon - Saya bermaksud menghapus ini, saya menambahkannya karena tindakan yang saya buat tidak pernah terlihat - Apa yang bisa saya lakukan salah?
Silakan gunakan StackOverflow untuk pertanyaan. Kami mencoba menggunakan pelacak masalah untuk diskusi bug dan fitur, tetapi tidak untuk dukungan.
Adapun kode, itu melanggar batasan Redux dengan melakukan efek samping ( cart.init()
) dan mencoba mengirimkan tindakan ( dispatch()
) di dalam peredam. Ini tidak diperbolehkan, seperti yang disebutkan lebih dari sekali dalam dokumentasi. Pengurang harus fungsi murni, jadi Anda harus menempatkan efek samping sebelum atau sesudah mengirim tindakan.
Jika Anda mengirim di dalam peredam, kode Anda akan gagal. Jika tidak gagal, mungkin Anda memiliki Janji menelan kesalahan di suatu tempat. Sulit untuk mengatakan lebih banyak dari potongan kode ini.
Komentar yang paling membantu
Tidak berhubungan tapi
dapat merusak aplikasi Anda setiap hari.
Kami secara khusus mengatakan :