react 中inline-block的間距去哪了?
create-react-app:
vue init:
html:
React 的 JSX 並不是真的 HTML/XML ,而只是創建元素的語法糖,兩個元素中間沒有空白節點。
jsx在創建真實的時候,元素之間是不會有間隙的,元素之間沒了間隙也就沒了間距。像下面這樣
JSX:
&123&
&123&
HTML:
&123&&123&
這其實是編譯器(解析器/轉換器)做的,翻譯的結果由jsx變成了js的createElement。
這樣做的好處是比較簡單,因為要處理語言中的空白符和注釋等會增加成本;另外最終html還有可能會遇到壓縮等情況,所以統一去掉了這些空白也有一些道理。不好的地方就如題主所說行內空白會有影響,但這是可以通過css辦到的。
另外像內部空白如pre元素里的空白是不應該去掉的,這個解析器不應該做不到。
雖然都是 JSX 語法,但是兩者的編譯器是不同的:React 是 Babel 處理的(babel-plugin-transform-react-jsx 插件),為了保證縮進不影響渲染結果因此會去除每行的前後空格,而 Vue 是自己寫的 html parser。
React 官方文檔描述如下:
JSX removes whitespace at the beginning and ending of a line. It also removes blank lines. New lines adjacent to tags are removed; new lines that occur in the middle of string literals are condensed into a single space.
所以如果想保留空格可以寫在一行,如:
const elem = &
&hello& &world&
&
編譯後:
const elem = React.createElement(
"div",
null,
React.createElement(
"span",
null,
"hello"
),
" ",
React.createElement(
"span",
null,
"world"
)
);
https://github.com/facebook/react/issues/1643
看看是不是你想要的React回自動去除兩個(&>和&<)組件之間的空白!官網有說!鏈接就不貼了!JSX寫的都是React組件,包括html元素組件!
推薦閱讀:
※web前端如何學習github上的項目?
※開發人員可以分為哪幾類?
※支持ie8的mvvm框架比較?
※Vue 2.0 為什麼選用 Flow 進行靜態代碼檢查而不是直接使用 TypeScript?
※如果ECMAScript 2015+完全普及,原型鏈這種知識是否還有了解的必要?