Вы можете использовать условный оператор:
<h1>{ this.state.submitedFirstName ? ` Hello ${this.state.submitedFirstName}` : ""}</h1>
Если this.state.submitedFirstName не определено или что-то неверно (например, пустая строка ""), он вернет «Hello Mike» или вернет пустой строка.
Вы также можете переместить условное выражение наружу, чтобы оно даже не отображало тег h1, если нет имени.
{this.state.submitedFirstName && <h1>Hello {this.state.submitedFirstName}</h1>}
Вот обновление, объясняющее, почему исходный код не работал Я разобью его на порядок выполнения и объясню:
Состояние this.state.submitedFirstName
начинается как неопределенное. Поэтому при первом запуске кода левая сторона оператора && (AND) оценивается как undefined
. Поскольку && не удовлетворено, левая сторона возвращается из выражения:
console.log(this.state.submitedFirstName && this.state.submitedFirstName) // undefined (from the left side to be specific)
console.log(`${undefined}`) // "undefined" is converted to string
console.log(`Hello ${undefined}`) // "Hello undefined"
После того, как состояние установлено this.state.submitedFirstName === "Mike"
. Левая сторона «Mike» оценивается как правдивая, поэтому она возвращает правую часть, которая также является «Mike».
console.log(this.state.submitedFirstName && this.state.submitedFirstName) // "Mike" (from the right side to be specific)
// console.log(`Hello ${"Mike"}`) // "Hello Mike"
Именно поэтому он возвращает либо «Hello undefined», либо «Hello Mike».
Проверьте mdn для получения дополнительной информации о && и других логических операторах .