هل من الممكن إيقاف تشغيل التحذيرات "المفيدة" التي تم تلقيها عند استخدام وظيفة "الإرسال" في التسجيلات أو تأثير "وضع"؟
أو على الأقل اجعلها اختيارية.
احتفظ بمنشئي الإجراءات وأنواع الإجراءات في ملفات مخصصة ، والتي أعتقد أنها أفضل ممارسة عامة للإعادة (انظر على سبيل المثال هنا )
هذا يعني أنني أستخدم دائمًا منشئي الإجراءات في تأثيرات dva والتسجيلات والمكونات.
مثال:
actionTypes.js:
export const TOKEN_RESTORED = 'auth/TOKEN_RESTORED';
Actions.js:
export default {
tokenRestored: payload => ({type: TOKEN_RESTORED, payload: payload.token})
};
model.js:
app.model({
namespace: ...,
state: { ... },
effects: { ... },
subscriptions: {
setup({dispatch}) {
let token = localStorage.token;
if (token) {
dispatch(actions.tokenRestored({token}));
}
}
}
});
أعتقد أنه يجب أن يكون المستخدمون قادرين على كتابة رمز مثل هذا ، دون تلقي عشرات التحذيرات من النوع:
Warning: dispatch: auth/tokenRestored should not be prefixed with namespace auth
نمط الكود هو طريقة تفضيل شخصي ، وتعاقب dva المستخدمين الذين لا يستخدمون السلاسل مباشرة لأنواع الإجراءات.
لقد واجهت للتو نفس المشكلة.
تعد إدارة الإجراءات من خلال إجراءات الإعادة أمرًا مناسبًا.
ومع ذلك ، لا يمكن استخدام هذا في النماذج بسبب التحذير.
لقد قمت بإنشاء طلب سحب في حال كان ذلك يساعد في جذب الانتباه لهذه المشكلة.
نوصي باستخدام https://www.npmjs.com/package/babel-plugin-dev-expression لإزالة الثوابت والتحذير للإنتاج.
ماذا عن بيئة التطوير؟
ماذا لو لم أستطع استخدام مكونات Babel الإضافية لأنني أستخدم إنشاء تطبيق رد فعل؟
لماذا يجب أن أتلقى تحذيرات لاستخدام تقنية شائعة؟
في 19 يوليو 2017 06:25 ، كتب "chencheng (云 谦)" [email protected] :
نوصي باستخدام https://www.npmjs.com/package/babel-plugin-dev-expression
لتجريد الثابت والتحذير من أجل الإنتاج.-
أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/dvajs/dva/issues/988#issuecomment-316261873 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/ABJVKPRJMf0P0qVcTgOm-UH4q9RCNpg4ks5sPXcTgaJpZM4N9hlv
.
orzarchi أعتقد أن sorrycc مشغول للغاية ويركز على المشكلات المفتوحة فقط حتى يتمكن من الحفاظ على هذا المشروع. لذلك عليك إنشاء عدد جديد للفت انتباهه.
راجع للشغل ، هل تمكنت من حل هذه التحذيرات؟
لدي مشكلة مختلفة. يضع نموذجي إجراءً لا تستخدمه إلا النماذج الأخرى:
// realtime.js
yield put({ type: 'message', payload: { message } });
والنماذج الأخرى تستمع إلى الرسائل من الوقت الفعلي:
// someModel.js
const message = yield take('realtime/message');
نظرًا لأن نموذج realtime
لا يفعل شيئًا مع message
نفسه ، فلا يوجد تأثير محدد لـ message
. بسبب أن yield put({ type: 'message', payload: { message } })
لم يكن مسبوقًا بخوارزميات dvajs الداخلية ولم يتم إطلاق realtime/message
.
وإذا قمت بالبادئة يدويًا:
// realtime.js
yield put({ type: 'realtime/message', payload: { message } });
يطرح تحذيرات حول مساحة الاسم ("... لا ينبغي أن تكون مسبوقة بمساحة الاسم ...")
لحل المشكلة ، أضفت تأثيرًا وهميًا إلى النموذج:
// realtime.js
'effects': {
// dvajs requires effect to be defined to auto-prefix it with namespace
// if add prefix manually then dvajs throws annoying warnings
// https://github.com/dvajs/dva/issues/988
message: () => { },
}
الآن ليس لدي أي تحذيرات والنماذج الأخرى تتلقى realtime/message
عمل.
لا أفهم لماذا فتح القضية مرة أخرى سيغير رأيه.
يبدو الحل جيدًا ، لكن الجهد الإضافي لا يستحق ذلك عندما يكون لديك مئات الإجراءات.
من الشائع أيضًا استخدام الثوابت لأنواع الإجراءات (أو وظائف منشئ الإجراء) ، وعلى هذا النحو ، فأنا دائمًا أرسل البادئة.
لم أجد حلاً بعد ، لذلك أفكر في تفرع dva لمشروعي الحالي ، ثم لا أستخدمه مرة أخرى أبدًا.
لقد تأخرت قليلاً على الحفلة هنا ، لكن هذا اختراق اعتدت عليه للتغلب على الخطأ. بالتأكيد ليس حلاً جيدًا ولكنه على الأقل يخنق ناتج الخطأ.
"// my-model.js
console.error = message => {
إذا (message.indexOf ("prefixNamespace") === -1) {
console.log (رسالة) ؛
}
} ؛
لقد تأخرت قليلاً على الحفلة هنا ، لكن هذا اختراق اعتدت عليه للتغلب على الخطأ. بالتأكيد ليس حلاً جيدًا ولكنه على الأقل يخنق ناتج الخطأ.
console.error = message => { if (message.indexOf("prefixNamespace") === -1) { console.log(message); } };
هل يمكنك توضيح الكود الخاص بك؟ اين وضعت الكود؟
يمكنك وضعه في src / app.tsx. وإذا كنت تريد الاحتفاظ بـ console.error بدلاً من تحويل جميع console.error إلى console.log ، فيمكنك تجربة هذا الرمز
const errorLog = console.error;
console.error = (...rest) => {
if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) {
errorLog.call(console, ...rest);
}
};
يمكنك وضعه في src / app.tsx. وإذا كنت تريد الاحتفاظ بـ console.error بدلاً من تحويل جميع console.error إلى console.log ، فيمكنك تجربة هذا الرمز
const errorLog = console.error; console.error = (...rest) => { if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) { errorLog.call(console, ...rest); } };
شكرًا لك ، ووجدت أنه يمكنني وضعه في أي مكان في التطبيق ، :))
التعليق الأكثر فائدة
لقد تأخرت قليلاً على الحفلة هنا ، لكن هذا اختراق اعتدت عليه للتغلب على الخطأ. بالتأكيد ليس حلاً جيدًا ولكنه على الأقل يخنق ناتج الخطأ.
"// my-model.js
console.error = message => {
إذا (message.indexOf ("prefixNamespace") === -1) {
console.log (رسالة) ؛
}
} ؛