Это имеет гораздо большее отношение только к JavaScript, чем к React.
Нет, использование !!
не особенно полезно. Это:
if (!!this.props.postDetails.author) {
такой же, как этот:
if (this.props.postDetails.author) {
Ни один из них не означает, что author
содержит массив хотя бы с одной записью, на которую опирается ваша следующая строка кода. Чтобы сделать это, добавьте .length
или, в вашем конкретном примере, возможно [0]
(в случае, если author
имела запись, но эта запись была ошибочной):
if (this.props.postDetails.author[0]) {
Если author
может быть null
или undefined
, нам нужно сделать две проверки:
if (this.props.postDetails.author && this.props.postDetails.author[0]) {
Поскольку мы собираемся использовать результат, может быть лучше сохранить результат в переменной или константе:
const firstAuthor = this.props.postDetails.author && this.props.postDetails.author[0];
if (firstAuthor) {
return firstAuthor.name;
}
Пример текущего кода, выдавшего ошибку:
console.log("Running");
const author = [];
if (!!author) {
console.log(author[0].name);
} else {
console.log("No Author");
}
Пример проверки [0]
, когда мы знаем, что author
не будет null
/ falsy:
console.log("Running");
const author = [];
if (author[0]) {
console.log(author[0].name);
} else {
console.log("No Author");
}
Пример двойной проверки, когда author
может быть null
/ falsy:
console.log("Running");
const author = null;
if (author && author[0]) {
console.log(author[0].name);
} else {
console.log("No Author");
}
Пример сохранения и использования результата:
function example(author) {
const firstAuthor = author && author[0];
if (firstAuthor) {
return firstAuthor.name;
} else {
return "Loading...";
}
}
console.log(example(null)); // Loading...
console.log(example([])); // Loading...
console.log(example([{name:"Harlan Ellison"}])); // "Harlan Ellison" (RIP)