لدي مشروع غير React بالشفرة التالية
.
_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))
}
}
_المخفّضون / 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
المشكلة لدي هي أن actions/page.js
أبدا يرى CREATE_PAGE
العمل. على الرغم من ذلك؟
غير ذات صلة ولكن
- هذه حالة متطابقة ، يقوم index.js بتشغيل التطبيق ونحن مشتركون فيه
- إجراء ReduxINIT بدلاً من إضافة طبقة أخرى من الإجراءات
- مما يؤدي إلى سيناريوهات غير مقصودة.
يمكن كسر تطبيقك في أي يوم.
- هذه هي أنواع الإجراءات الخاصة المحفوظة بواسطة Redux.
- لأية إجراءات غير معروفة ، يجب عليك إعادة الحالة الحالية.
- إذا كانت الحالة الحالية غير محددة ، يجب إعادة الحالة الأولية.
- لا تشير إلى أنواع الإجراءات هذه مباشرة في التعليمات البرمجية الخاصة بك.
شكرًا gaearon - أعتزم إزالة هذا ، لقد أضفته لأن الإجراءات التي قمت بإنشائها لم يتم رؤيتها مطلقًا - ما الذي يمكن أن أفعله بشكل خاطئ؟
الرجاء استخدام StackOverflow للأسئلة. نحاول استخدام أداة تعقب المشكلات لمناقشات الأخطاء والميزات ، ولكن ليس للدعم.
بالنسبة للكود ، فإنه ينتهك قيود إعادة التشغيل من خلال تنفيذ تأثير جانبي ( cart.init()
) ومحاولة إرسال إجراء ( dispatch()
) داخل المخفض. هذا غير مسموح به ، كما هو مذكور أكثر من مرة في الوثائق. يجب أن تكون المخفضات وظائف خالصة ، لذلك يجب وضع الآثار الجانبية قبل أو بعد إرسال الإجراء.
إذا كنت ترسل داخل مخفض ، يجب أن تفشل التعليمات البرمجية الخاصة بك. إذا لم تفشل ، فربما يكون لديك وعد بابتلاع الخطأ في مكان ما. من الصعب قول المزيد من هذا المقتطف من الكود.
التعليق الأكثر فائدة
غير ذات صلة ولكن
يمكن كسر تطبيقك في أي يوم.
نقول على وجه التحديد :