动态

详情 返回 返回

React 如何區分 Class 和 Function? - 动态 详情

當我們要渲染一個組件時,通常並不需要關心它是如何定義(是Class還是Function):

function Greeting() {
  return <p>Hello</p>;
}
class Greeting extends React.Component {
  render() {
    return <p>Hello</p>;
  }

使用

// 是類還是函數 —— 無所謂
<Greeting />

但 React 本身 在意其中的差別!
如果 Greeting 是一個函數,React 需要調用它。

// 我們的代碼
function Greeting() {
  return <p>Hello</p>;
}

// React 內部
const result = Greeting(props); // <p>Hello</p>

但如果 Greeting 是一個類,React 需要先用 new 操作符將其實例化,然後 調用剛才生成實例的 render 方法:

// 我們的代碼
class Greeting extends React.Component {
  render() {
    return <p>Hello</p>;
  }
}

// React 內部
const instance = new Greeting(props); // Greeting {}
const result = instance.render(); // <p>Hello</p>

那React內部是如何區分Class和Function呢?
答案是:React.Component.prototype.isReactComponent**標記
React在原型上找到 isReactComponent,就會把組件當做類處理。

// React 內部
class Component {}
Component.prototype.isReactComponent = {};

// 檢測
class Greeting extends Component {}
console.log(Greeting.prototype.isReactComponent); // ✅ Yes

更多細節請閲讀Dan的原文

Add a new 评论

Some HTML is okay.