【发布时间】:2022-01-23 08:21:04
【问题描述】:
我在下面写ReactJs代码的时候,第一次使用if(this.state.username==true),并没有得到我期望的结果。
但是当我使用if(this.state.username) 时,它可以按我的需要工作。因此,我可以明显看到if(x==true) 和if(x) 之间存在差异。我也知道,有时,它们可能意味着相同并产生相同的结果。
我的问题是,如果我的构造函数设置如下,为什么这两个表达式的行为会有所不同。这里if(this.state.username)的真正含义是什么?
感谢您帮助我理解。
constructor(props){
super(props)
this.state = {username:""}
}
两个代码如下:
class MyForm extends React.Component {
constructor(props){
super(props)
this.state = {username:""}
}
changeName = (e) =>{
let target = e.target;
let name = target.name;
let value = target.value;
this.setState ({[name]: value});
}
render(){
let myHeader;
if(this.state.username==true){
myHeader = <h1>Hello {this.state.username}</h1>;
}else{
myHeader = "";
}
return (
<form>
{myHeader}
<h1>{this.state.username}</h1>
<p>Enter your name:</p>
<input
name='username'
type="text"
onChange = {this.changeName}
/>
</form>
);
}
}
ReactDOM.render(<MyForm />, document.getElementById('root'));
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<div id="root"></div>
和
class MyForm extends React.Component {
constructor(props){
super(props)
this.state = {username:""}
}
changeName = (e) =>{
let target = e.target;
let name = target.name;
let value = target.value;
this.setState ({[name]: value});
}
render(){
let myHeader;
if(this.state.username){
myHeader = <h1>Hello {this.state.username}</h1>;
}else{
myHeader = "";
}
return (
<form>
{myHeader}
<h1>{this.state.username}</h1>
<p>Enter your name:</p>
<input
name='username'
type="text"
onChange = {this.changeName}
/>
</form>
);
}
}
ReactDOM.render(<MyForm />, document.getElementById('root'));
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<div id="root"></div>
【问题讨论】:
-
在您的问题中,您首先提到
===运算符,然后是==。到底是哪一个? -
这是一个错字。我的意思是 == 而不是 ===。感谢您缓存它。我更正了。
-
首先,
this.state.username是一个字符串,而不是一个布尔。所以你不应该将它与true进行比较。其次,如果你只输入if(x),它会检查x是否真实。你应该知道真假,因为它们会出现很多:sitepoint.com/javascript-truthy-falsy
标签: javascript html reactjs