javascript - 尝试用字符串插入 JSX
问题描述
我目前在我的登录页面设置上有我的欢迎消息,即在用户在模式中输入他们的名字之前只显示“你好”。在用户点击提交后,我很想把“你好”拿走,让它和用户名一起出现。
我尝试用字符串插入 JSX,但没有运气。有人可以帮忙吗?
这就是我在渲染中的方式。
<h1>{`Hello ${this.state.submitedFirstName && this.state.submitedFirstName}`}</h1>
解决方案
您可以使用条件运算符:
<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”的原因。
推荐阅读
- python - 搜索 pandas DataFrame 任意行中包含的文本
- python - BeautifulSoup .children 或 .content 标签之间没有空格
- xaringan - 将本地目录中的本地图像包含并调整大小到 Xaringan (remark.js) 演示文稿中...(通过 Mac 上的 Rstudio 使用)
- azure-devops - 代理池“默认”不适用于新的构建管道
- c# - 在 SQL 连接中存储 ID 值,如果存在则返回
- java - 将数组潜水到子数组问题
- swift - 归档时如何修复“在父类中找不到'init(domain:code:userInfo :)'”?
- machine-learning - 为什么 softmax 在 mnist fasion keras 代码中工作正常但不是 sigmoid?
- c# - 如何通过 dot net 创建具有许可证的 Dynamics 365 用户
- android - 如何以编程方式创建垂直或水平指南