मैंने अभी-अभी अपने रिएक्ट नेटिव को अपग्रेड किया है और अब iOS सिम्युलेटर में चेतावनी का एक गुच्छा है। उन्हें ठीक करने के अलावा, मैं इन चेतावनियों को कैसे छिपाऊं ताकि मैं देख सकूं कि नीचे क्या है?
मैंने अभी-अभी अपने रिएक्ट नेटिव को अपग्रेड किया है और अब iOS सिम्युलेटर में चेतावनी का एक गुच्छा है। उन्हें ठीक करने के अलावा, मैं इन चेतावनियों को कैसे छिपाऊं ताकि मैं देख सकूं कि नीचे क्या है?
जवाबों:
मूल निवासी प्रतिक्रिया के अनुसार प्रलेखन , आप की स्थापना करके चेतावनी संदेश छिपा कर सकते हैं disableYellowBox
करने के लिए true
इस तरह:
console.disableYellowBox = true;
चुनिंदा चेतावनियों को छिपाने का एक बेहतर तरीका (जो कि नवीनतम और महानतम आरएन संस्करण में अपग्रेड के बाद अनिश्चित काल के लिए दिखाई देता है) अपने प्रोजेक्ट में एक सामान्य जेएस फाइल में कंसोल.इनगार्डयेलोबॉक्स सेट करना है। उदाहरण के लिए, आज अपनी परियोजना को आरएन 0.25.1 में अपग्रेड करने के बाद मैं बहुत कुछ देख रहा था ...
चेतावनी: ReactNative.createElement हटा दिया गया है ...
मैं अभी भी रिएक्ट-नेटिव से उपयोगी चेतावनियों और त्रुटि संदेशों को देखने में सक्षम होना चाहता हूं, लेकिन मैं इस विशेष चेतावनी को स्क्वैश करना चाहता हूं क्योंकि यह एक बाहरी एनपीएम लाइब्रेरी से आ रहा है जिसने अभी तक आरएन 0.25 में ब्रेकिंग परिवर्तन को शामिल नहीं किया है। तो मेरे App.js में मैं इस लाइन को जोड़ता हूं ...
// RN >= 0.63
import { LogBox } from 'react-native';
LogBox.ignoreLogs(['Warning: ...']);
// RN >= 0.52
import {YellowBox} from 'react-native';
YellowBox.ignoreWarnings(['Warning: ReactNative.createElement']);
// RN < 0.52
console.ignoredYellowBox = ['Warning: ReactNative.createElement'];
इस तरह मुझे अभी भी अन्य त्रुटियां और चेतावनी मेरे देव परिवेश के लिए सहायक हैं, लेकिन मैं अब उस विशेष को नहीं देखता हूं।
पीला बॉक्स जगह को निष्क्रिय करने के लिए
console.disableYellowBox = true;
आपके आवेदन में कहीं भी आमतौर पर रूट फाइल में तो यह iOS और Android दोनों पर लागू होगा।
उदाहरण के लिए
export default class App extends React.Component {
render() {
console.disableYellowBox = true;
return (<View></View>);
}
}
किसी भी घटक के जीवनचक्र पद्धति के तहत आपकी app.js फ़ाइल में घटकडिमाउंट () में आपको इन दोनों को जोड़ना होगा, किसी को छोड़कर काम नहीं करेगा।
console.ignoredYellowBox = ['Warning: Each', 'Warning: Failed'];
console.disableYellowBox = true;
add this line in your app main screen.
कंसोल .isableYellowBox = true;
अपनी index.js फ़ाइल में निम्न कोड जोड़ें
कंसोल .isableYellowBox = true;
import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
console.disableYellowBox = true;
AppRegistry.registerComponent(appName, () => App);
यदि आप उन्हें किसी विशेष बिल्ड में छिपाना चाहते हैं क्योंकि आप एक डेमो या कुछ कर रहे हैं, तो आप अपनी Xcode स्कीम को एडिट बिल्ड बनाने के लिए एडिट कर सकते हैं और ये येलो चेतावनियां नहीं दिखेंगी। इसके अतिरिक्त, आपका ऐप बहुत तेज़ी से चलेगा।
आप निम्नलिखित करके अपने सिम्युलेटर और वास्तविक डिवाइस के लिए योजना को संपादित कर सकते हैं:
Product
> Scheme
>Edit Scheme...
Build Configuration
से Debug
करने के लिए Release
।Release
: कोई चेतावनी नहीं, और तेज़ ऐप!
Release
इस तरह आने वाले लोगों के लिए, कंसोल से लाल चेतावनी को निष्क्रिय करने की कोशिश करना, जो बिल्कुल बेकार सूचना देते हैं, जैसे कि feb / 17, आप इस कोड को कहीं और जोड़ सकते हैं
console.error = (error) => error.apply;
सभी को निष्क्रिय कर देता है console.error
कंसोल .isableYellowBox = true;
यह अनुप्रयोग स्तर के लिए काम करता है। इसे index.js फ़ाइल में कहीं भी रखें
console.disableYellowBox = true;
अपने आवेदन में कहीं भी पीले बॉक्स को निष्क्रिय करने के लिए । आमतौर पर रूट फ़ाइल में यह iOS और Android दोनों पर लागू होगा।
अधिक विवरण प्राप्त करने के लिए कृपया आधिकारिक दस्तावेज देखें
कंसोल .isableYellowBox = true;
मैंने पाया कि जब मैंने उपर्युक्त विधियों का उपयोग करके विशिष्ट चेतावनियों (येलो-बॉक्स संदेश) को निष्क्रिय कर दिया था , तो चेतावनी मेरे मोबाइल डिवाइस पर अक्षम कर दी गई थी , लेकिन वे अभी भी मेरे कंसोल पर लॉग इन हो रहे थे, जो बहुत कष्टप्रद और विचलित करने वाला था।
अपने कंसोल में लॉग इन होने से चेतावनी को रोकने के लिए, आप बस ऑब्जेक्ट warn
पर विधि को ओवरराइड कर सकते हैं console
।
// This will prevent all warnings from being logged
console.warn = () => {};
प्रदान किए गए संदेश का परीक्षण करके केवल विशिष्ट चेतावनियों को अक्षम करना संभव है:
// Hold a reference to the original function so that it can be called later
const originalWarn = console.warn;
console.warn = (message, ...optionalParams) => {
// Insure that we don't try to perform any string-only operations on
// a non-string type:
if (typeof message === 'string') {
// Check if the message contains the blacklisted substring
if (/Your blacklisted substring goes here/g.test(message))
{
// Don't log the value
return;
}
}
// Otherwise delegate to the original 'console.warn' function
originalWarn(message, ...optionalParams);
};
यदि आप स्ट्रिंग का परीक्षण करने के लिए एक नियमित अभिव्यक्ति का उपयोग नहीं कर सकते (या नहीं करना चाहते हैं), तो यह indexOf
विधि भी काम करेगी:
// An index of -1 will be returned if the blacklisted substring was NOT found
if (message.indexOf('Your blacklisted substring goes here') > -1) {
// Don't log the message
return;
}
विदित हो कि यह तकनीक उन सभी संदेशों को फ़िल्टर कर देगी जो warn
फ़ंक्शन से गुजरते हैं, भले ही वे कहाँ से उत्पन्न हुए हों। इस वजह से, सावधान रहें कि आप एक अत्यधिक उदार ब्लैकलिस्ट को निर्दिष्ट नहीं करते हैं जो अन्य सार्थक त्रुटियों को दबा देगा जो कि प्रतिक्रिया मूल के अलावा कहीं और से उत्पन्न हो सकती है।
इसके अलावा, मेरा मानना है कि रिएक्ट नेटिव console.error
त्रुटियों (रेड-बॉक्स संदेशों) को लॉग करने के लिए विधि का उपयोग करता है , इसलिए मैं मान रहा हूं कि इस तकनीक का उपयोग विशिष्ट त्रुटियों को भी फ़िल्टर करने के लिए किया जा सकता है।
(लेकिन अपने स्वयं के कोड के लिए नहीं)
क्यों: जब एक नया RN- ऐप इनिशियलाइज़ किया जाता है, तो Xcode प्रोजेक्ट में 100 चेतावनियाँ शामिल होती हैं, जो शोर को विचलित करती हैं (लेकिन शायद हानिरहित अन्यथा)
समाधान: सेट प्रासंगिक लक्ष्यों के लिए बिल्ड सेटिंग्स के तहत हाँ करने के लिए सभी चेतावनियों को बाधित ।
मैं हमारी टीम द्वारा एक छोटे उपकरण देव की सिफारिश करता हूं, यह फ्लोट आइकन में सभी चेतावनी और त्रुटि एकत्र करता है। तुलना करें console.disableYellowBox = true;
, आप अभी भी देख सकते हैं कि चेतावनी या त्रुटि कहां है लेकिन यह आपको परेशान नहीं करता है।
WT-Console Github Repo: https://github.com/WeBankFinTech/wt-console