createElement
createElement γ«γγ£γ¦ React θ¦η΄ γδ½ζγ§γγΎγγγγγ― JSX γζΈγ代γγοΏ½?ζοΏ½?οΏ½γ¨γγ¦ε©η¨γ§γγΎγγ
const element = createElement(type, props, ...children)γͺγγ‘γ¬γ³γΉ
createElement(type, props, ...children)
createElement γεΌγ³εΊγγ¦γζοΏ½?οΏ½γγ typeγpropsγchildren γζγ£γ React θ¦η΄ γδ½ζγγΎγγ
import { createElement } from 'react';
function Greeting({ name }) {
return createElement(
'h1',
{ className: 'greeting' },
'Hello'
);
}εΌζ°
-
type:typeεΌζ°γ―ζεΉγͺ React οΏ½?γ³γ³γγΌγγ³γεγ§γͺγγγ°γͺγγΎγγγδΎγγ°γγΏγ°εοΏ½?ζεεοΌ'div'γ'span'οΌγγReact γ³γ³γγΌγγ³γοΌι’ζ°γγ―γ©γΉγγΎγγ―FragmentοΏ½?γγγͺηΉε₯γͺγ³γ³γγΌγγ³γοΌγθ©²ε½γγΎγγ -
props:propsεΌζ°γ―γͺγγΈγ§γ―γγnullγ§γͺγγγ°γͺγγΎγγγnullγζΈ‘γγ¨γη©ΊοΏ½?γͺγγΈγ§γ―γγ¨εγγγγ«ζ±γγγΎγγReact γ―γζΈ‘γγγpropsγ¨εγ props γζγ£γθ¦η΄ γδ½ζγγΎγγpropsγͺγγΈγ§γ―γοΏ½?refγ¨keyγ―ηΉε₯γ§γγγθΏγγγelementοΏ½?element.props.refγelement.props.keyγ¨γγ¦ε©η¨γ§γγΎγγγelement.refγͺγγelement.keyγ¨γͺγγΎγγ -
ηη₯ε―θ½
...children: γΌγεδ»₯δΈοΏ½?εγγΌγγγγγγ― React γγΌγγγ€γΎγγReact θ¦η΄ γζεεγζ°ε€γγγΌγΏγ«γη©ΊγγΌγοΌnullγundefinedγtrueγfalseοΌγγγγγ― React γγΌγοΏ½?ι εγ¨γͺγγΎγγ
θΏγε€
createElement γ―δ»₯δΈοΏ½?γγγγγ£γζγ€ React θ¦η΄ γͺγγΈγ§γ―γγθΏγγΎγγ
type: ζοΏ½?οΏ½γγtypeγprops: ζοΏ½?οΏ½γγpropsγγγ γrefγ¨keyγ―ι€γγγγtypeγγ¬γ¬γ·γΌοΏ½?type.defaultPropsγζγ€γ³γ³γγΌγγ³γγ§γγγ°γζ¬ γγ¦γγγ undefined γ¨γͺγ£γ¦γγpropsγ―type.defaultPropsγγε€γεεΎγγΎγγref: ζοΏ½?οΏ½γγrefγζͺζοΏ½?οΏ½οΏ½?ε ΄εγ―nullγkey: ζοΏ½?οΏ½γγkeyγεΌ·εΆηγ«ζεεγ«ε€ζγγγΎγγζͺζοΏ½?οΏ½οΏ½?ε ΄εγ―nullγ
ιεΈΈγγοΏ½?θ¦η΄ γγ³γ³γγΌγγ³γγγθΏγγγδ»οΏ½?θ¦η΄ οΏ½?εγ¨γγ¦η¨γγΎγγθ¦η΄ οΏ½?γγγγγ£γθͺγΏεγγγ¨γ―ε―θ½γ§γγγδ½ζεΎγ―θ¦η΄ οΏ½?ζ§ι γιε ¬ι (opaque) γ¨γγ¦ζ±γγγ¬γ³γγΌοΏ½?γΏθ‘γγγγ«γγγΉγγ§γγ
注ζηΉ
-
React θ¦η΄ γ¨γοΏ½? props γ―γ€γγ₯γΌγΏγγ« (immutable) γ¨γγ¦ζ±γγδ½ζεΎγ«γοΏ½?ε οΏ½?οΏ½γε€ζ΄γγ¦γ―γͺγγΎγγγγγγεΌ·εΆγγγγγ«γReact γ―ιηΊη°ε’γ«γγγ¦γθΏγγγθ¦η΄ γ¨γοΏ½?
propsγγγγγ£γζ΅ γεη΅ (freeze) γγΎγγ -
JSX γδ½Ώη¨γγε ΄εγη¬θͺοΏ½?γ«γΉγΏγ γ³γ³γγΌγγ³γγγ¬γ³γγΌγγγγγ«γ―γΏγ°γε€§ζεγ§ε§γγεΏ θ¦γγγγΎγγγ€γΎγγ
<Something />γ―createElement(Something)γ¨εηγ§γγγ<something />οΌε°ζεοΌγ―createElement('something')γ¨εηγ§γοΌζεεγͺοΏ½?γ§γη΅γΏθΎΌγΏοΏ½? HTML γΏγ°γ¨γγ¦ζ±γγγΎγοΌγ -
θ€ζ°οΏ½?εοΏ½?ε οΏ½?οΏ½γγγΉγ¦ιηγ«εγγ£γ¦γγε ΄εγ
createElementγ«γ―εγcreateElement('h1', {}, child1, child2, child3)οΏ½?γγγ«θ€ζ°οΏ½?εΌζ°γ¨γγ¦ζΈ‘γγ¦γγ γγγεγεηγͺε ΄εγ―γι εε ¨δ½γ第 3 εΌζ°γ¨γγ¦createElement('ul', {}, listItems)οΏ½?γγγ«ζΈ‘γγ¦γγ γγγγγγ«γγγReact γ―εηγͺγͺγΉγγ«keyγζ¬ γγ¦γγε ΄εγ«θ¦εγεΊγγγγ«γͺγγΎγγιηγͺγͺγΉγγ§γ―δΈ¦γ³ζΏγγ―ζ±Ίγγ¦ηΊηγγͺγγγγkey γ―εΏ θ¦γγγΎγγγ
δ½Ώη¨ζ³
JSX γδ½Ώγγγ«θ¦η΄ γδ½ζγγ
JSX γε₯½γγ§γͺγε ΄εγγγγγΈγ§γ―γγ§δ½Ώη¨γ§γγͺγε ΄εγ«γ―γ代γγγ« createElement γδ½Ώη¨γ§γγΎγγ
JSX γδ½Ώγγγ«θ¦η΄ γδ½ζγγγ«γ―γcreateElement γεΌγ³εΊγγ¦γδ½γγοΏ½? typeγpropsγchildren γεΌζ°γ¨γγ¦ζΈ‘γγΎγγ
import { createElement } from 'react';
function Greeting({ name }) {
return createElement(
'h1',
{ className: 'greeting' },
'Hello ',
createElement('i', null, name),
'. Welcome!'
);
}children γ―γͺγγ·γ§γ³γ§γεΏ
θ¦γͺγ γζΈ‘γγγ¨γγ§γγΎγοΌδΈθ¨οΏ½?δΎγ§γ―εγ 3 γ€γγγΎγοΌγγοΏ½?γ³γΌγγ―γ<h1> γγγγ«ζ¨ζΆζεεγε
₯γγ¦θ‘¨η€ΊγγΎγγζ―θΌοΏ½?γγγδ»₯δΈγ« JSX γδ½Ώγ£γ¦ζΈγη΄γγεγδΎγη€ΊγγΎγγ
function Greeting({ name }) {
return (
<h1 className="greeting">
Hello <i>{name}</i>. Welcome!
</h1>
);
}θͺθΊ«οΏ½?γ«γΉγΏγ React γ³γ³γγΌγγ³γγγ¬γ³γγΌγγγ«γ―γ'h1' οΏ½?γγγͺζεεγ§γ―γͺγ Greeting οΏ½?γγγͺι’ζ°γ type γ¨γγ¦ζΈ‘γγΎγγ
export default function App() {
return createElement(Greeting, { name: 'Taylor' });
}JSX γδ½Ώη¨γγε ΄εγ―δ»₯δΈοΏ½?γγγ«γͺγγΎγγ
export default function App() {
return <Greeting name="Taylor" />;
}δ»₯δΈγ―γcreateElement γδ½Ώη¨γγ¦ζΈγγγγγ«οΏ½?γ΅γ³γγ«γ§γγ
import { createElement } from 'react'; function Greeting({ name }) { return createElement( 'h1', { className: 'greeting' }, 'Hello ', createElement('i', null, name), '. Welcome!' ); } export default function App() { return createElement( Greeting, { name: 'Taylor' } ); }
εγγοΏ½?γ JSX γ§ζΈγγ¨δ»₯δΈοΏ½?γγγ«γͺγγΎγγ
function Greeting({ name }) { return ( <h1 className="greeting"> Hello <i>{name}</i>. Welcome! </h1> ); } export default function App() { return <Greeting name="Taylor" />; }
γ©γ‘γοΏ½?γ³γΌγγ£γ³γ°γΉγΏγ€γ«γει‘γγγΎγγοΏ½?γ§γγγγΈγ§γ―γγ«εγγγ¦ε₯½γγͺζΉγδ½Ώη¨γγ¦γγ γγγcreateElement γ¨ζ―θΌγγ¦ JSX γδ½Ώη¨γγε ΄εοΏ½?δΈ»γͺε©ηΉγ―γγ©οΏ½?ιγγΏγ°γγ©οΏ½?ιγγΏγ°γ«ε―ΎεΏγγ¦γγγγη°‘εγ«γγγγγ¨γ§γγ
γγγ«ζ·±γη₯γ
θ¦η΄ (element) γ¨γ―γγ¦γΌγΆγ€γ³γΏγΌγγ§γΌγΉοΏ½?θ»½ιγͺθͺ¬ζζΈγοΏ½?γγ¨γ§γγδΎγγ°γ<Greeting name="Taylor" /> γ¨ createElement(Greeting, { name: 'Taylor' }) γ―γγγγγ欑�?γγγͺγͺγγΈγ§γ―γγηζγγΎγγ
// Slightly simplified
{
type: Greeting,
props: {
name: 'Taylor'
},
key: null,
ref: null,
}γοΏ½?γͺγγΈγ§γ―γγδ½ζγγγ γγ§γ―γGreeting γ³γ³γγΌγγ³γγγ¬γ³γγΌγγγγγDOM θ¦η΄ γδ½ζγγγγγγγγγ§γ―γͺγγγ¨γ«ζ³¨ζγγ¦γγ γγγ
React θ¦η΄ γ¨γ―γγγγζη€ΊζΈοΏ½?γγγͺγοΏ½?γ§γγReact γ«εΎγ§ Greeting γ³γ³γγΌγγ³γγγ¬γ³γγΌγγγγζη€ΊγγγοΏ½?γ§γγγοΏ½?γͺγγΈγ§γ―γγ App γ³γ³γγΌγγ³γγγθΏγγγ¨γ§γReact γ«ζ¬‘γ«δ½γγγΉγγγδΌγγοΏ½?γ§γγ
θ¦η΄ οΏ½?δ½ζγ―ιεΈΈγ«οΏ½?οΏ½δΎ‘γ§γγγγγζι©εγγγιΏγγγγγεΏ θ¦γ―γγγΎγγγ