在 React 中定义空 dom 元素的正确方法
Correct way to define an empty dom element in React
我在 prop 中将一个可选参数 checkbox
发送到一个组件:
var checkBox = this.props.checkbox ? <span className='checkbox'></span> : null;
然后我这样说:
<div>
...
{checkBox}
...
</div>
从上面可以看出,我给变量赋了null。但我可以改为分配空字符串 ''
,这似乎给出了相同的结果。
哪个合适?
您需要使用null。如果你使用像 '' 这样的空字符串,那么 react 将创建一个空的 span dom 元素,所以它是不一样的。
var label1 = <label>My Label</label>; // react generates a label element
var label2 = null; // react doesn't generate any dom element
var label3 = ''; // react generates and empty span like <span></span>
使用false
、null
或undefined
。
此片段显示了在 React 中呈现虚假值的行为:
<meta charset="UTF-8">
<script src="https://fb.me/react-0.13.2.js"></script>
<script src="https://fb.me/JSXTransformer-0.13.2.js"></script>
<div id="app"></div>
<script type="text/jsx;harmony=true">void function() { "use strict";
var falsyValues = [false, 0, "" , null, undefined, NaN]
var App = React.createClass({
componentDidMount() {
[].slice.call(React.findDOMNode(this).childNodes)
.forEach(child => console.log(child.outerHTML))
},
render() {
return <div>
{falsyValues.map(falsy => <div id={'test-' + falsy}>
Before
{falsy}
After
</div>)}
</div>
}
})
React.render(<App/>, document.getElementById('app'))
}()</script>
false
、null
和 undefined
不生成任何内容:
<div id="test-false" data-reactid=".0.0"><span data-reactid=".0.0.0">Before</span><span data-reactid=".0.0.2">After</span></div>
<div id="test-null" data-reactid=".0.3"><span data-reactid=".0.3.0">Before</span><span data-reactid=".0.3.2">After</span></div>
<div id="test-undefined" data-reactid=".0.4"><span data-reactid=".0.4.0">Before</span><span data-reactid=".0.4.2">After</span></div>
而 ''
、0
和 NaN
做:
<div id="test-0" data-reactid=".0.1"><span data-reactid=".0.1.0">Before</span><span data-reactid=".0.1.1">0</span><span data-reactid=".0.1.2">After</span></div>
<div id="test-" data-reactid=".0.2"><span data-reactid=".0.2.0">Before</span><span data-reactid=".0.2.1"></span><span data-reactid=".0.2.2">After</span></div>
<div id="test-NaN" data-reactid=".0.5"><span data-reactid=".0.5.0">Before</span><span data-reactid=".0.5.1">NaN</span><span data-reactid=".0.5.2">After</span></div>
为了方便。如果您测试的值是 false
、null
或 undefined
,则您可以有条件地生成内联内容,而条件内容不应显示:
<div>
...
{this.props.checkbox && <span className='checkbox'></span>}
...
</div>
我在 prop 中将一个可选参数 checkbox
发送到一个组件:
var checkBox = this.props.checkbox ? <span className='checkbox'></span> : null;
然后我这样说:
<div>
...
{checkBox}
...
</div>
从上面可以看出,我给变量赋了null。但我可以改为分配空字符串 ''
,这似乎给出了相同的结果。
哪个合适?
您需要使用null。如果你使用像 '' 这样的空字符串,那么 react 将创建一个空的 span dom 元素,所以它是不一样的。
var label1 = <label>My Label</label>; // react generates a label element
var label2 = null; // react doesn't generate any dom element
var label3 = ''; // react generates and empty span like <span></span>
使用false
、null
或undefined
。
此片段显示了在 React 中呈现虚假值的行为:
<meta charset="UTF-8">
<script src="https://fb.me/react-0.13.2.js"></script>
<script src="https://fb.me/JSXTransformer-0.13.2.js"></script>
<div id="app"></div>
<script type="text/jsx;harmony=true">void function() { "use strict";
var falsyValues = [false, 0, "" , null, undefined, NaN]
var App = React.createClass({
componentDidMount() {
[].slice.call(React.findDOMNode(this).childNodes)
.forEach(child => console.log(child.outerHTML))
},
render() {
return <div>
{falsyValues.map(falsy => <div id={'test-' + falsy}>
Before
{falsy}
After
</div>)}
</div>
}
})
React.render(<App/>, document.getElementById('app'))
}()</script>
false
、null
和 undefined
不生成任何内容:
<div id="test-false" data-reactid=".0.0"><span data-reactid=".0.0.0">Before</span><span data-reactid=".0.0.2">After</span></div>
<div id="test-null" data-reactid=".0.3"><span data-reactid=".0.3.0">Before</span><span data-reactid=".0.3.2">After</span></div>
<div id="test-undefined" data-reactid=".0.4"><span data-reactid=".0.4.0">Before</span><span data-reactid=".0.4.2">After</span></div>
而 ''
、0
和 NaN
做:
<div id="test-0" data-reactid=".0.1"><span data-reactid=".0.1.0">Before</span><span data-reactid=".0.1.1">0</span><span data-reactid=".0.1.2">After</span></div>
<div id="test-" data-reactid=".0.2"><span data-reactid=".0.2.0">Before</span><span data-reactid=".0.2.1"></span><span data-reactid=".0.2.2">After</span></div>
<div id="test-NaN" data-reactid=".0.5"><span data-reactid=".0.5.0">Before</span><span data-reactid=".0.5.1">NaN</span><span data-reactid=".0.5.2">After</span></div>
为了方便。如果您测试的值是 false
、null
或 undefined
,则您可以有条件地生成内联内容,而条件内容不应显示:
<div>
...
{this.props.checkbox && <span className='checkbox'></span>}
...
</div>