คุณซ่อนคำเตือนใน React Native iOS Simulator ได้อย่างไร


108

ฉันเพิ่งอัปเกรด React Native ของฉันและตอนนี้โปรแกรมจำลอง iOS มีคำเตือนมากมาย นอกจากการแก้ไขแล้วฉันจะซ่อนคำเตือนเหล่านี้ได้อย่างไรเพื่อให้ฉันเห็นว่ามีอะไรอยู่ข้างใต้

คำตอบ:


207

ตาม React Native Documentationคุณสามารถซ่อนข้อความเตือนได้โดยตั้งค่าdisableYellowBoxเป็นtrueดังนี้:

console.disableYellowBox = true;

อัปเดต

~~ console.disableYellowBox ~~ ถูกลบออกและตอนนี้คุณสามารถใช้:

import { LogBox } from 'react-native';
LogBox.ignoreLogs(['Warning: ...']); // Ignore log notification by message
LogBox.ignoreAllLogs();//Ignore all log notifications

เพื่อละเว้นการแจ้งเตือนบันทึกทั้งหมด


3
สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่ไม่ใช่คำตอบอื่น ๆ ที่กล่าวว่า console.ignoredYellowBox = [... ];
sdfsdf

6
ขอบคุณ! นี่ควรเป็นคำตอบที่เลือก
Sreejith Ramakrishnan

1
ขออภัยคุณจะเพิ่ม console.disableYellowBox = true ได้ที่ไหน
Michel Arteta

2
@ ไมค์ที่ใดก็ได้ในสคริปต์ของคุณเมื่อคุณต้องการปิดใช้งานกล่องสีเหลือง
Moussawi7

2
สถานที่ที่ดีในการวางไว้คือตัวสร้างของส่วนประกอบ RootContainer!
Fernando Vieira

105

วิธีที่ดีกว่าในการเลือกซ่อนคำเตือนบางอย่าง (ซึ่งจะแสดงขึ้นเรื่อย ๆ หลังจากอัปเกรดเป็นเวอร์ชัน RN ล่าสุดและยิ่งใหญ่ที่สุด) คือการตั้งค่าconsole.ignoredYellowBoxในไฟล์ JS ทั่วไปในโปรเจ็กต์ของคุณ ตัวอย่างเช่นหลังจากอัปเกรดโครงการของฉันในวันนี้เป็น RN 0.25.1 ฉันได้เห็น ...

คำเตือน: ReactNative.createElement เลิกใช้แล้ว ...

ฉันยังคงต้องการเห็นคำเตือนและข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์จาก React-Native แต่ฉันต้องการยกเลิกคำเตือนนี้เนื่องจากมาจากไลบรารี npm ภายนอกที่ยังไม่ได้รวมการเปลี่ยนแปลงขั้นสุดท้ายใน RN 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'];

ด้วยวิธีนี้ฉันยังคงได้รับข้อผิดพลาดอื่น ๆ และคำเตือนที่เป็นประโยชน์สำหรับสภาพแวดล้อมการพัฒนาของฉัน แต่ฉันไม่เห็นข้อผิดพลาดนั้นอีกต่อไป


การแก้ไขที่สมบูรณ์แบบสำหรับฉันแม้ว่าฉันจะมีคำเตือน "ReactNative.createElement เลิกใช้แล้ว" เดียวกัน
JD Angerhofer

2
คุณควรเขียนข้อความแสดงข้อผิดพลาดมากน้อยเพียงใดเพื่อเพิกเฉย
Soorena

คำตอบนี้ต้องการการอัปเดต YelloBox ไม่ได้เป็นส่วนหนึ่งของ react-native อีกต่อไป
Haidar Zeineddine

17

เพื่อปิดการใช้งานกล่องสีเหลือง

console.disableYellowBox = true; 

ที่ใดก็ได้ในแอปพลิเคชันของคุณ โดยปกติจะอยู่ในไฟล์รูทดังนั้นมันจะใช้กับทั้ง iOS และ Android

ตัวอย่างเช่น

export default class App extends React.Component {
     render() {
          console.disableYellowBox = true;
          return (<View></View>);
     }
}

12

add this line in your app main screen.

console.disableYellowBox = จริง;

ตัวอย่างเช่น: - ในไฟล์ index.js

import { AppRegistry } from 'react-native';
import './src/utils';
import App from './App';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => App);
console.disableYellowBox = true;

11

ในไฟล์ app.js ของคุณภายใต้วิธีวงจรชีวิตของคอมโพเนนต์ใด ๆ เช่นเดียวกับใน componentDidmount () คุณต้องเพิ่มทั้งสองอย่างนี้ยกเว้นสิ่งใด ๆ จะไม่ทำงาน

console.ignoredYellowBox = ['Warning: Each', 'Warning: Failed'];
console.disableYellowBox = true;

นั่นไม่เป็นความจริงมีบางอย่างเกิดขึ้นในโครงการของคุณ บรรทัดหนึ่งระบุว่า "เพิกเฉยต่อรายการคำเตือนนี้" (ซึ่งเป็นวิธีที่แม่นยำที่สุดในการดำเนินการ) บรรทัดหนึ่งระบุว่า "ละเว้นคำเตือนทั้งหมด" (ซึ่งเป็นวิธีที่ไม่อ้อมค้อมจริงๆ) ฉันมีเพียงบรรทัดแรกเท่านั้นและมันก็ระงับคำเตือนของฉันอย่างสมบูรณ์แบบ
Mike Hardy

10

เพิ่มรหัสต่อไปนี้ในไฟล์index.jsของคุณ

console.disableYellowBox = จริง;

    import {AppRegistry} from 'react-native';
    import App from './App';
    import {name as appName} from './app.json';

    console.disableYellowBox = true;



AppRegistry.registerComponent(appName, () => App);

8

หากคุณกำลังพยายามสาธิตแอปอย่างรวดเร็ว

หากคุณต้องการซ่อนไว้ในบิลด์เฉพาะเนื่องจากคุณกำลังทำการสาธิตหรืออะไรบางอย่างคุณสามารถแก้ไขชุดรูปแบบ Xcode ของคุณเพื่อทำให้เป็นรุ่นและคำเตือนสีเหลืองเหล่านี้จะไม่ปรากฏขึ้น นอกจากนี้แอปของคุณจะทำงานได้เร็วขึ้นมาก

คุณสามารถแก้ไข Scheme สำหรับเครื่องจำลองและอุปกรณ์จริงของคุณได้โดยทำดังต่อไปนี้:

  1. ในโครงการใน XCode
  2. Product> Scheme>Edit Scheme...
  3. เปลี่ยนBuild ConfigurationจากDebugเป็นRelease.

1
ควรเป็นคำตอบที่ได้รับการยอมรับ ในRelease: ไม่มีคำเตือนและแอพที่เร็วกว่า!
cappie013

2
คุณไม่ได้รับคุณสมบัติการแก้ไขข้อบกพร่องใด ๆ ในRelease
Phil Andrews

1
@PhilAndrews ฉันเห็นด้วย! ฉันไม่รู้ว่าฉันโพสต์แบบนี้เมื่อไหร่ แต่มีคนจำนวนมากพอที่คิดว่ามันมีประโยชน์ที่ฉันจะปล่อยมันไป ฉันคงพยายามสาธิตแอปให้ใครสักคนแล้วและต้องการกำจัดคำเตือนสีเหลืองซึ่งในกรณีนี้นี่เป็นวิธีที่ถูกต้อง
Joshua Pinter

5

สำหรับผู้ที่มาด้วยวิธีนี้พยายามปิดคำเตือนสีแดงจากคอนโซลซึ่งให้ข้อมูลที่ไร้ประโยชน์อย่างแท้จริง ณ วันที่ 17 กุมภาพันธ์คุณสามารถเพิ่มบรรทัดของรหัสนี้ได้ที่ใดที่หนึ่ง

console.error = (error) => error.apply;

ปิดการใช้งานทั้งหมด console.error


1
ขอบคุณ! ฉันไม่รู้ด้วยซ้ำว่าข้อผิดพลาดของคอนโซลเป็นสาเหตุที่ทำให้หน้าจอสีแดงโผล่ขึ้นมา ฉันคิดว่ามีบางอย่างผิดปกติเมื่อลอง / จับไม่ได้: o
นิค


4

ปิดการใช้งานกล่องสีเหลืองที่console.disableYellowBox = true;ใดก็ได้ในแอปพลิเคชันของคุณ โดยปกติจะอยู่ในไฟล์รูทดังนั้นมันจะใช้กับทั้ง iOS และ Android

สำหรับรายละเอียดเพิ่มเติมโปรดตรวจสอบเอกสารอย่างเป็นทางการ




1

ฉันพบว่าแม้ว่าฉันจะปิดการใช้งานคำเตือนเฉพาะ (ข้อความในกล่องสีเหลือง) โดยใช้วิธีการที่กล่าวมาข้างต้นคำเตือนก็ถูกปิดการใช้งานบนอุปกรณ์มือถือของฉัน แต่คำเตือนเหล่านั้นยังคงถูกบันทึกไว้ในคอนโซลของฉันซึ่งสร้างความรำคาญและเสียสมาธิมาก

เพื่อป้องกันไม่ให้มีการบันทึกคำเตือนลงในคอนโซลของคุณคุณสามารถแทนที่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ฟังก์ชันโดยไม่คำนึงถึงแหล่งที่มา ด้วยเหตุนี้โปรดระวังว่าคุณไม่ได้ระบุบัญชีดำที่ใจกว้างมากเกินไปซึ่งจะระงับข้อผิดพลาดที่มีความหมายอื่น ๆ ที่อาจเกิดจากที่อื่นที่ไม่ใช่ React Native

นอกจากนี้ฉันเชื่อว่า React Native ใช้console.errorวิธีการบันทึกข้อผิดพลาด (ข้อความกล่องสีแดง) ดังนั้นฉันจึงคิดว่าเทคนิคนี้สามารถใช้เพื่อกรองข้อผิดพลาดที่เฉพาะเจาะจงได้เช่นกัน


1

ฉันแนะนำนักพัฒนาเครื่องมือขนาดเล็กโดยทีมงานของเราซึ่งรวบรวมคำเตือนและข้อผิดพลาดทั้งหมดไว้ในไอคอนลอย เปรียบเทียบกับconsole.disableYellowBox = true;คุณยังสามารถดูได้ว่ามีคำเตือนหรือข้อผิดพลาดอยู่ที่ไหน แต่จะไม่รบกวนคุณ ป้อนคำอธิบายภาพที่นี่ WT-Console Github Repo: https://github.com/WeBankFinTech/wt-console


0

ในไฟล์AppDelegate.mของคุณคุณสามารถเปลี่ยนบรรทัดนี้:

jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];

และแทนที่dev=trueโดยdev=falseในตอนท้าย


0

ที่เกี่ยวข้อง: ระงับคำเตือน Xcode จากไลบรารี React Native

(แต่ไม่ใช่สำหรับรหัสของคุณเอง)

ทำไม:เมื่อเริ่มต้นแอป RN ใหม่โปรเจ็กต์ Xcode จะมีคำเตือนที่ใกล้เคียงกับ 100 คำเตือนซึ่งทำให้เกิดเสียงรบกวน (แต่อาจไม่เป็นอันตรายอย่างอื่น)

วิธีแก้ปัญหา:ตั้งค่าการยับยั้งคำเตือนทั้งหมดเป็นใช่ภายใต้การตั้งค่าสร้างสำหรับเป้าหมายที่เกี่ยวข้อง

ป้อนคำอธิบายภาพที่นี่

ปิดการใช้งานคำเตือนใน Xcode จากเฟรมเวิร์ก

https://github.com/facebook/react-native/issues/11736


ด้วย; สำหรับข้อผิดพลาดทางตรรกะ ดู "-Xanalyzer -analyzer-disabled-all-checks"
Leonard Pauli

คำถามเดิมเกี่ยวกับคำเตือนในแอป (เช่นกล่องสีเหลือง) ฉันพบคำถามนี้เมื่อพยายามล้างคำเตือนโครงการ Xcode ทำไมต้องโหวตลง? ดูmeta.stackoverflow.com/questions/299352/…
Leonard Pauli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.