0 является ложным значением, поэтому, когда оно оценивается с помощью &&, оно возвращает 0. Однако 0 может отображаться React, поскольку это количество:
// Renderable values
1 && <GeneralLoader /> // => Renders <GeneralLoader />
"a string" && <GeneralLoader /> // => Renders <GeneralLoader />
0 && <GeneralLoader /> // => Renders '0'
// Non-renderable values
false && <GeneralLoader /> // => Renders nothing
null && <GeneralLoader /> // => Renders nothing
undefined && <GeneralLoader /> // => Renders nothing
TLDR
Это связано с тем, как сам javascript обрабатывает [истинные и ложные значения][1]:
В JavaScript истинное значение — это значение, которое считается истинным при встрече в логическом контексте. Все значения являются истинными, если только они не определены как ложные (т. е. за исключением ложных, 0, "", null, undefined и NaN).
При использовании с оператором && возвращаемое значение зависит от левого значения:
- Если левое значение истинно, возвращается правое значение.
- Если левое значение ложно, возвращается его значение.
Примеры:
// Truthy values
1 && "hello" // => "hello"
"a string" && "hello" // => "hello"
// Falsy values
0 && "hello" // => 0
false && "hello" // => false
null && "hello" // => null
undefined && "hello" // => undefined
Те же правила применяются к JSX, потому что это [расширение синтаксиса JavaScript][2]. Однако проблема в том, что **
Проблема в том, что 0 является ложным значением, поэтому, когда оно оценивается с помощью &&, оно возвращает 0. Однако 0 визуализируется React, потому что это число
// Renderable values
1 && <GeneralLoader /> // => Renders <GeneralLoader />
"a string" && <GeneralLoader /> // => Renders <GeneralLoader />
0 && <GeneralLoader /> // => Renders 0
// Non-renderable values
false && <GeneralLoader /> // => Renders nothing
null && <GeneralLoader /> // => Renders nothing
undefined && <GeneralLoader /> // => Renders nothing
person
Giovanni Benussi
schedule
15.08.2019