React рассматривает элемент временной шкалы как нулевой даже при проверке условия

Я отправляю этот ответ, поэтому самый верхний ответ (при сортировке по активности) - это не тот, который просто ошибочен.

Что такое Stacktrace?

Stacktrace - это очень полезный инструмент отладки. Он показывает стек вызовов (значение, стек функций, которые были вызваны до этой точки) в то время, когда было выбрано неперехваченное исключение (или время, когда стек была создана вручную). Это очень полезно, потому что оно не только показывает вам, где произошла ошибка, но также и то, как программа оказалась в этом месте кода. Это приводит к следующему вопросу:

Что такое исключение?

Исключение - это то, что среда выполнения использует, чтобы сообщить вам, что произошла ошибка. Популярные примеры: NullPointerException, IndexOutOfBoundsException или ArithmeticException. Каждый из них вызывается, когда вы пытаетесь сделать что-то, что невозможно. Например, при попытке разыменовать Null-объект будет выбрано исключение NullPointerException:

Object a = null;
a.toString();                 //this line throws a NullPointerException

Object[] b = new Object[5];
System.out.println(b[10]);    //this line throws an IndexOutOfBoundsException,
                              //because b is only 5 elements long
int ia = 5;
int ib = 0;
ia = ia/ib;                   //this line throws an  ArithmeticException with the 
                              //message "/ by 0", because you are trying to
                              //divide by 0, which is not possible.

Как мне обращаться со Stacktraces / Exceptions?

Сначала выясните, что вызывает исключение. Попробуйте googleing имя исключения, чтобы узнать, в чем причина этого исключения. В большинстве случаев это будет вызвано неправильным кодом. В приведенных выше примерах все исключения вызваны неправильным кодом. Поэтому для примера NullPointerException вы можете убедиться, что a никогда не является нулевым в то время. Например, вы можете инициализировать a или включить проверку, подобную этой:

if (a!=null) {
    a.toString();
}

Таким образом, строка нарушения не выполняется, если a==null. То же самое касается других примеров.

Иногда вы не можете убедиться, что вы не получите исключения. Например, если вы используете сетевое соединение в своей программе, вы не можете остановить компьютер от потери его интернет-соединения (например, вы не можете запретить пользователю отключать сетевое подключение компьютера). В этом случае сетевая библиотека, вероятно, выбросит исключение. Теперь вы должны поймать исключение и обработать его. Это означает, что в примере с сетевым соединением вы должны попытаться снова открыть соединение или уведомить пользователя или что-то в этом роде. Кроме того, всякий раз, когда вы используете catch, всегда поймайте только исключение, которое вы хотите поймать, не используйте широко распространенные выписки, такие как catch (Exception e), которые поймают все исключения. Это очень важно, потому что в противном случае вы случайно поймаете неправильное исключение и отреагируете неверно.

try {
    Socket x = new Socket("1.1.1.1", 6789);
    x.getInputStream().read()
} catch (IOException e) {
    System.err.println("Connection could not be established, please try again later!")
}

Почему я не должен использовать catch (Exception e)?

Давайте использовать небольшой пример, чтобы показать, почему вы не должны просто перехватывать все исключения:

int mult(Integer a,Integer b) {
    try {
        int result = a/b
        return result;
    } catch (Exception e) {
        System.err.println("Error: Division by zero!");
        return 0;
    }
}

Что этот код пытается сделать, так это поймать ArithmeticException, вызванное возможным делением на 0. Но он также ловит возможно NullPointerException, который выбрасывается, если a или b являются null. Это означает, что вы можете получить NullPointerException, но вы будете рассматривать его как исключение ArithmeticException и, вероятно, ошибаетесь. В лучшем случае вы все еще пропустите, что было исключение NullPointerException.

TLDR

  1. Выясните, в чем причина исключения, и исправьте его, чтобы он не делал этого. 't исключение вообще.
  2. Если 1. невозможно, поймайте конкретное исключение и обработайте его. Никогда не добавляйте try / catch, а затем просто игнорируйте исключение! Не делай этого! Никогда не используйте catch (Exception e), всегда улавливайте определенные Исключения. Это избавит вас от многих головных болей.
0
задан Haq.H 24 March 2019 в 19:50
поделиться

1 ответ

null && something разрешается до null.

Похоже, <Timeline> не может принять null в качестве props.children. Попробуйте подготовить события перед рендерингом <Timeline>:

let allEvents = [];
if (data) allEvents.push(/*something*/)
if (events) {
  allEvents = allEvents.concat(events.map(/*something*/));
}
...
{allEvents.length > 0 && (
  <Timeline>
    {allEvents.map(event => <TimelineEvent/>)}
  </Timeline>
)}

Может быть ошибка https://github.com/rcdexta/react-event-timeline/blob/master/components/Timeline. JS # L8

const childrenWithProps = React.Children.map(children, child => React.cloneElement(child, { orientation }))
0
ответ дан UjinT34 24 March 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: