React Component和React Element之間的區別是什麼?文檔中提到了兩者,但沒有詳細說明,有些方法需要組件,其他元素...React Component和React Element之間的區別
回答
將組件視爲類,將元素視爲實例。而已!
爲了進一步闡述答案,React元素沒有任何方法,原型上也沒有。這也使他們更快。
「A ReactElement是光,無狀態的,不可變的,虛擬一個DOM元素的表示」 - https://facebook.github.io/react/docs/glossary.html#react-elements
阿反應組分render()
函數返回幕後反應的元素的DOM樹(這是順便說一句虛擬DOM )。涉及到一些複雜的映射和差異邏輯,但基本上這些React元素映射到DOM元素。
您也可以直接創建元素React.createElement(arg)
其中,arg可以是html標記名稱或React組件類。
反應的元素
一個陣營元素只是一個普通的老JavaScript的Object
沒有自己的方法。它基本上具有四個屬性:
type
,一個String
表示一個HTML標記或參考指的是陣營元器件key
,一個String
唯一地標識一個陣營元素ref
,向訪問的參考無論底層DOM節點或陣營組件實例)props
(屬性Object
)
React元素不是React組件的實例。它只是一個關於如何創建React組件實例(或取決於要創建的HTML標籤)的簡化「描述」。
描述React組件的React元素不知道它最終呈現給哪個DOM節點 - 該關聯被抽象並在呈現時被解析。
React元素可能包含子元素,因此能夠形成表示虛擬DOM樹的元素樹。
反應的組分和陣營組件實例
自定義陣營組分是由React.createClass
或通過延伸React.Component
(ES2015)創建。如果React組件被實例化,它期望props
Object
並返回一個實例,該實例被稱爲React組件實例。
React組件可以包含狀態並可以訪問React生命週期方法。它必須至少有一個render
方法,該方法在調用時會返回一個React元素( - 樹)。請注意,您絕不會自己構建React組件實例,而是讓React爲您創建它。
A React Element
是你會認爲是一個基本的html(dom是確切的)元素。這只是一種創建元素而不使用很有爭議的jsx格式的方式。
A React Component
是你可以考慮作爲一個對象。它有它的方法,支持React lifecycles
,通常是不可用的(至少還沒有發現任何重用,歡迎舉例)。它必須有一個渲染功能。
A React Class
就是你所說的一類。功能明智的React Class
和React Component
是相同的。只有語法纔是真正的變化,因爲React Component
基於ES6 syntax
。另一個主要變化是除非使用箭頭函數,否則不再支持函數的默認綁定。從ES6
開始,Mixins
也不再支持。
React Element
- 這是一個簡單的對象,它描述了一個DOM節點及其屬性或屬性,可以說。它是一個不可變的描述對象,你不能對它應用任何方法。
EG -
<button class="blue"></button>
React Component
- 它是接受輸入,並返回一個陣營元件的功能或類。它必須保持對其DOM節點和子組件實例的引用。
const SignIn =() => (
<div>
<p>Sign In</p>
<button>Continue</button>
<button color='blue'>Cancel</button>
</div>
);
有相關的各種事情在這裏參與,用自己的名字:
- 組件
- 組件實例
- 元素
這是稍微奇怪,因爲如果你習慣了其他的UI框架,你就可以希望只有兩種東西,大致對應於類(如Widget
)和實例(如new Widget()
)。 React並非如此;組件實例是而不是與元素相同,它們之間也沒有一對一的關係。爲了說明這一點,考慮以下代碼:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
class MyComponent extends React.Component {
constructor(props) {
super(props);
console.log('This is a component instance:', this);
}
render() {
const another_element = <div>Hello, World!</div>;
console.log('This is also an element:', another_element);
return another_element;
}
}
console.log('This is a component:', MyComponent)
const element = <MyComponent/>;
console.log('This is an element:', element);
ReactDOM.render(
element,
document.getElementById('root')
);
在上面的代碼:
MyComponent
(所述類本身)是一個組件element
是一個元素。它是而不是MyComponent
的一個實例;相反,它只是對要創建的組件實例的描述。這是key
,props
,ref
和type
屬性的對象。這裏,key
和ref
是null
,props
是空對象,並且type
是MyComponent
。- 當
element
被渲染時,實例的MyComponent
被創建(並且,在上面的示例中,從其構造函數記錄自身)。 another_element
也是一個元素,並具有key
,ref
,props
和type
屬性,就像element
做 - 但這次的type
值是字符串"div"
。
React團隊的博客文章React Components, Elements, and Instances中詳細探討了React具有這三個不同概念的設計原因,我建議閱讀。
最後,應該注意的是,雖然官方文檔嚴格地使用術語「組件」來指代一個函數或類,「組件實例」來指代一個實例,但其他來源並不一定遵守這個術語;在閱讀堆棧溢出答案或討論GitHub時,您應該期望看到「組件」被使用(錯誤地)指「組件實例」。
組件是創建元素的工廠。
- 1. React $ Element和ReactElement之間的區別
- 2. React-native和Electron之間的區別
- 3. Symfony:Action + partial和Component之間的區別
- 4. 從'react'導入React,{Component}
- 5. React Shared Component/Caching
- 6. // * [local-name()='element']和// *:element?之間的區別是什麼?
- 7. react-native鏈接和cocoapods之間的區別?
- 8. react-native MainActivity.java和MyApp.java之間的區別是什麼
- 9. 通過導入和導入+ ReactRender.DOM呈現之間的區別 - React
- 10. React-Router V4 - <Match>和<Route>之間的區別
- 11. react-router 4.0,react-router-dom和react-router-redux有什麼區別?
- 12. React Component Names Like BEM
- 13. React Native Component Without UI
- 14. React Child Component Not Rendering
- 15. Google Places Autocomplete React Component
- 16. React Native Component Not Rendering
- 17. React - renderToString和renderToStaticMarkup之間有什麼區別
- 18. 在XML中是<element/>和<element></element>之間的區別嗎?
- 19. react-d3-component在create-react-app中執行
- 20. 在React Component中導入BrowserWindow
- 21. JavaScript框架如Vue,React和Angular和Bootstrap之間的區別是什麼?
- 22. React組件和React組件實例有什麼區別?
- 23. \ Phalcon \ Mvc \ User \ Component和Phalcon \ Mvc \ User \ Plugin之間的區別
- 24. self.element ='this'和self.send(「element =」,'this')之間的區別
- 25. JSNI:JavaScriptObject和Element JSNI函數參數之間的區別?
- 26. 容器的Child和Element之間有什麼區別?
- 27. $ this-> requestElement()和$ this-> element()之間的區別是什麼?
- 28. react-fetch和whatwg-fetch有什麼區別
- 29. ElementTree和Element之間有什麼區別? (python xml)
- 30. React Component Props的解構ImmutableJS映射
此鏈接顯示更多關於此信息:https://facebook.github.io/react/docs/glossary.html – Hoffmann
這實際上是錯誤的。元素不是一個實例。元素是一個描述。 –
此博客文章解釋元素和組件:https://facebook.github.io/react/blog/2015/12/18/react-components-elements-and-instances.html –