An element is a description. Nothing has run.
The common read: A JSX tag is a call, so <Greeting name="Taylor" /> has already run Greeting's body by the time that line finishes, and what I am holding is its output.
Writing the tag runs none of your component's code. It builds one plain object, a description of what you want React to do later: no DOM node, no rendered output, and not a single line of Greeting executed.
Takeaway: Building an element runs no component code and creates no DOM node.
The object is also cheap enough that optimizing its creation is wasted work: memoizing a tag to save the allocation gains nothing and adds a dependency array. What a memoized element does provide is a stable object identity, which a later lesson covers.
Patch a prop after the element is built and a production build
React freezes the element and its props shallowly in development, so an assignment like el.props.name = "Morgan" throws there. In a common failure, the patch works in the production build on staging, throws in the development build in CI, and gets filed against whoever last changed the test runner. Treat every element you did not create as opaque: read it if you must, render it, never write to it.

