[英]Rendering empty space in React
請看下面的片段。 我試圖渲染一個閃爍的文本,當它沒有出現時,會留下一個空白空間。 然而,React 似乎只是一起刪除了元素。 如何在 React 中正確渲染空白空間? 試圖用各種跨度進行一些搜索和測試,但仍然沒有任何結果。 謝謝。
class Blinker extends React.Component { constructor(props) { super(); this.state = { appear: true } this.blinker = this.blinker.bind(this); } blinker() { this.setState({appear: !this.state.appear }); } componentDidMount() { setInterval(this.blinker, 1000) } componentWillUnmount() { clearInterval(this.blinker); } render() { const name = "testing"; const underScore = "_"; const com = "com"; return ( <div> <div id="test"> { name } </div> <div id="test"> { (this.state.appear) ? underScore : ' '} </div> <div id="test"> { com } </div> </div> ); } } ReactDOM.render(<Blinker />, app);
#test { display: inline-block; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="app"></div>
class Blinker extends React.Component { constructor(props) { super(); this.state = { appear: true } this.blinker = this.blinker.bind(this); } blinker() { this.setState({appear: !this.state.appear }); } componentDidMount() { setInterval(this.blinker, 1000) } componentWillUnmount() { clearInterval(this.blinker); } render() { const name = "testing"; const underScore = "_"; const com = "com"; return ( <div> <div id="test"> { name } </div> <div id="test"> { (this.state.appear) ? underScore : "\ \ "} </div> <div id="test"> { com } </div> </div> ); } } ReactDOM.render(<Blinker />, app);
#test { display: inline-block; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="app"></div>
您可以使用<span> </span>
:
class Blinker extends React.Component { constructor(props) { super(); this.state = { appear: true } this.blinker = this.blinker.bind(this); } blinker() { this.setState({appear: !this.state.appear }); } componentDidMount() { setInterval(this.blinker, 1000) } componentWillUnmount() { clearInterval(this.blinker); } render() { const name = "testing"; const underScore = "_"; const com = "com"; return ( <div> <div id="test"> { name } </div> <div id="test"> { (this.state.appear) ? underScore : <span> </span>} </div> <div id="test"> { com } </div> </div> ); } } ReactDOM.render(<Blinker />, document.getElementById('app'));
#test { display: inline-block; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="app"></div>
這是因為三個嵌套的行被轉換為父div元素的單個子元素,而不考慮空格。 解決方案是在元素之間明確地放置一個空格:
<div>
<div id="test"> { name } </div>
{''}
<div id="test">
{ (this.state.appear) ? underScore : "\u00a0\u00a0"}
{''}
</div>
<div id="test"> { com } </div>
</div>
我通常使用<Fragment> </Fragment>
,並根據需要以編程方式渲染它。 以下是打算嵌入的 3 個不同特殊字符的另一種類似用法。 🙂
import './rating.css'
let starMap={
'1': <Fragment></Fragment>,
'0.5': <Fragment></Fragment>,
'0': <Fragment></Fragment>
}
export default class Rating extends React.Component {
constructor(ops) {
super(ops)
}
render() {
return (
<Fragment>
<span className={'score'} style={{marginRight: '7px'}}>
<span className={'star'}>{starMap[1]}</span>
<span className={'star'}>{starMap[1]}</span>
<span className={'star'}>{starMap[1]}</span>
<span className={'star'}>{starMap[1]}</span>
<span className={'star'}>{starMap[0.5]}</span>
</span>
</Fragment>
)
}
}
沒有測試過,但它應該工作。
<div id="test" style={{ visibility: this.state.appear ? 'visible' : 'hidden' }}>
{{underScore}}
</div>
我使用樣式組件並創建了一個<Em />
組件:
import styled from "styled-components"
const Em = styled.span`
display: inline-block;
width: ${({ size = 1 }) => size}em;
`
const App = () => {
return <h1>I need<Em size={.5} />a half space</h1>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.