中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react中元素和組件有哪些區別

發布時間:2020-11-18 10:42:56 來源:億速云 閱讀:237 作者:小新 欄目:web開發

了解react中元素和組件有哪些區別?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

react中元素和組件的區別:1、元素數據結構是普通對象,而組件數據結構是類或純函數;2、在JSX中,被元素嵌套的元素會以屬性children的方式傳入該元素的組件。

react中元素和組件的區別:

1、React 元素

React 元素(React element),它是 React 中最小基本單位,我們可以使用 JSX 語法輕松地創建一個 React 元素:

const element = <div className="element">I'm element</div>

React 元素不是真實的 DOM 元素,它僅僅是 js 的普通對象(plain objects),所以也沒辦法直接調用 DOM 原生的 API。上面的 JSX 轉譯后的對象大概是這樣的:

{
    _context: Object,
    _owner: null,
    key: null,
    props: {
    className: 'element',
    children: 'I'm element'
  },
    ref: null,
    type: "div"
}

只有在這個元素渲染被完成后,才能通過選擇器的方式獲取它對應的 DOM 元素。不過,按照 React 有限狀態機的設計思想,應該使用狀態和屬性來表述組件,要盡量避免 DOM 操作,即便要進行 DOM 操作,也應該使用 React 提供的接口ref和getDOMNode()。一般使用 React 提供的接口就足以應付需要 DOM 操作的場景了,因此像 jQuery 強大的選擇器在 React 中幾乎沒有用武之地了。

除了使用 JSX 語法,我們還可以使用 React.createElement()React.cloneElement() 來構建 React 元素。

React.createElement()

JSX 語法就是用React.createElement()來構建 React 元素的。它接受三個參數,第一個參數可以是一個標簽名。如div、span,或者 React 組件。第二個參數為傳入的屬性。第三個以及之后的參數,皆作為組件的子組件。

React.createElement(
    type,
    [props],
    [...children]
)

React.cloneElement()

React.cloneElement()與React.createElement()相似,不同的是它傳入的第一個參數是一個 React 元素,而不是標簽名或組件。新添加的屬性會并入原有的屬性,傳入到返回的新元素中,而就的子元素獎杯替換。

React.cloneElement(
  element,
  [props],
  [...children]
)

2、React 組件

React 中有三種構建組件的方式。React.createClass()、ES6 class和無狀態函數。

React.createClass()

React.createClass()是三種方式中最早,兼容性最好的方法。在0.14版本前官方指定的組件寫法。

var Greeting = React.createClass({
  render: function() {
    return <h2>Hello, {this.props.name}</h2>;
  }
});

ES6 class

ES6 class是目前官方推薦的使用方式,它使用了ES6標準語法來構建,但它的實現仍是調用React.createClass()來實現了,ES6 class的生命周期和自動綁定方式與React.createClass()略有不同。

class Greeting extemds React.Component{
  render: function() {
    return <h2>Hello, {this.props.name}</h2>;
  }
};

無狀態函數

無狀態函數是使用函數構建的無狀態組件,無狀態組件傳入props和context兩個參數,它沒有state,除了render(),沒有其它生命周期方法。

function Greeting (props) {
  return <h2>Hello, {props.name}</h2>;
}

React.createClass()和ES6 class構建的組件的數據結構是類,無狀態組件數據結構是函數,它們在 React 被視為是一樣的。

3、元素與組件的區別

組件是由元素構成的。元素數據結構是普通對象,而組件數據結構是類或純函數。除此之外,還有幾點區別要注意:

this.props.children

在 JSX 中,被元素嵌套的元素會以屬性 children 的方式傳入該元素的組件。當僅嵌套一個元素時,children 是一個 React 元素,當嵌套多個元素時,children 是一個 React 元素的數組。可以直接把 children 寫入 JSX 的中,但如果要給它們傳入新屬性,就要用到React.cloneElement()來構建新的元素。我曾放過以下錯誤:

render () {
  var Child = this.props.children
  return <div><Child tip={'error!'}/><div>
}

因為 Child 是一個 React 元素,而不是組件,這樣的寫法是完全錯誤的,正確的方式應該是:

render () {
  var child = this.props.children
  return <div>{ React.cloneElement(child, {tip: 'right way!'}) }<div>
}

就這樣,原有屬性和新添加的屬性被一并傳入了子元素。使用React.cloneElement()才是操作元素的正確姿勢。

用戶組件

有的時候,組件可以讓用戶以屬性的方式傳入自定義的組件,來提升組件的靈活性。這個屬性傳入的就應該是 React 元素,而非 React 組件。使用 React 元素可以讓用戶傳入自定義組件的同時,為組件添加屬性。同樣,可以使用React.cloneElement()為自定義組件添加更多屬性,或替換子元素。

// 推薦
<MyComponent tick={
  <UserComponent tip="Yes"/>
} />
 
// 不推薦
<MyComponent tick={ UserComponent } />

最后,打個不恰當的比喻,React 組件是MyComponent,React 元素就是<MyComponent />

感謝各位的閱讀!看完上述內容,你們對react中元素和組件有哪些區別大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北碚区| 山丹县| 池州市| 开远市| 威海市| 包头市| 三台县| 天津市| 桐乡市| 紫金县| 五家渠市| 东台市| 隆子县| 额敏县| 淳安县| 金溪县| 祁阳县| 高青县| 霍山县| 二连浩特市| 廉江市| 万山特区| 东安县| 沙洋县| 辽中县| 平乡县| 南充市| 内黄县| 麻阳| 荔浦县| 如皋市| 会宁县| 温宿县| 鸡西市| 聂荣县| 巴彦淖尔市| 育儿| 日照市| 富顺县| 呼图壁县| 岱山县|