Files
react/docs/component-basics.html
T
2013-06-12 14:12:30 -07:00

175 lines
9.4 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>React | Component Basics</title>
<meta name="viewport" content="width=device-width">
<meta property="og:title" content="React | Component Basics" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://facebook.github.io/react/docs/component-basics.html" />
<meta property="og:image" content="http://facebook.github.io/react/img/logo_og.png" />
<meta property="og:description" content="A JavaScript library for building user interfaces" />
<link rel="shortcut icon" href="/react/favicon.ico">
<link rel="alternate" type="application/rss+xml" title="React" href="http://facebook.github.io/react/feed.xml">
<link rel="stylesheet" href="/react/css/react.css">
<link rel="stylesheet" href="/react/css/syntax.css">
<link rel="stylesheet" href="/react/css/codemirror.css">
<script type="text/javascript" src="//use.typekit.net/vqa1hcx.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="/react/js/codemirror.js"></script>
<script type="text/javascript" src="/react/js/javascript.js"></script>
<script type="text/javascript" src="/react/js/react.min.js"></script>
<script type="text/javascript" src="/react/js/JSXTransformer.js"></script>
<script type="text/javascript" src="/react/js/live_editor.js"></script>
<script type="text/javascript" src="/react/js/showdown.js"></script>
</head>
<body>
<div class="container">
<div class="nav-main">
<div class="wrap">
<a class="nav-home" href="/react/index.html">
<img class="nav-logo" alt="" src="/react/img/logo_small.png" width="38" height="38">
React
</a>
<ul class="nav-site">
<li><a href="/react/docs/getting-started.html" class="active">docs</a></li>
<li><a href="/react/support.html">support</a></li>
<li><a href="/react/downloads.html">download</a></li>
<li><a href="/react/blog/">blog</a></li>
<li><a href="http://github.com/facebook/react">github</a>
</ul>
<!-- <iframe src="http://ghbtns.com/github&#45;btn.html?user=facebook&#38;repo=react.js&#38;type=fork"allowtransparency="true" frameborder="0" scrolling="0" width="62" height="20"></iframe> -->
</div>
</div>
<section class="content wrap documentationContent">
<div class="nav-docs">
<div class="nav-docs-section">
<h3>Getting started</h3>
<ul>
<li><a href="/react/docs/getting-started.html">Getting Started</a></li>
<li><a href="/react/docs/tutorial.html">Tutorial</a></li>
<li><a href="/react/docs/common-questions.html">Common Questions</a></li>
</ul>
</div>
<div class="nav-docs-section">
<h3>Reference</h3>
<ul>
<li><a href="/react/docs/syntax.html">JSX Syntax</a></li>
<li><a href="/react/docs/component-basics.html" class="active">Component Basics</a></li>
<li><a href="/react/docs/component-data.html">Component Data</a></li>
<li><a href="/react/docs/component-lifecycle.html">Component Lifecycle</a></li>
<li><a href="/react/docs/event-handling.html">Event Handling</a></li>
<li><a href="/react/docs/advanced-components.html">Advanced Components</a></li>
<li><a href="/react/docs/mixins.html">Mixins</a></li>
<li><a href="/react/docs/api.html">API</a></li>
</ul>
</div>
</div>
<div class="inner-content">
<h1>Component Basics</h1>
<div class="subHeader">What are components?</div>
<p><em>Components</em> are the basic units of composition in React. Components encapsulate
the logic necessary to take input parameters and render markup. Components can
be rendered into an existing DOM element on the page by using
<code>React.renderComponent</code>:</p>
<div class="highlight"><pre><code class="javascript language-javascript" data-lang="javascript"><span class="c1">// Replaces everything in `document.body` with &lt;div&gt;Hello, world!&lt;/div&gt;;</span>
<span class="nx">React</span><span class="p">.</span><span class="nx">renderComponent</span><span class="p">(</span><span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span><span class="nx">Hello</span><span class="p">,</span> <span class="nx">world</span><span class="o">!&lt;</span><span class="err">/div&gt;, document.body);</span>
</code></pre></div>
<p>Keep in mind that <code>&lt;div&gt;</code> is <strong>not</strong> a DOM element! Keep reading...</p>
<h2>Types of Components</h2>
<p>There are two types of components:</p>
<ul>
<li><strong>Composite Components</strong></li>
<li><strong>DOM Components</strong></li>
</ul>
<h3>Composite Components <small>such as <code>TodoApp</code> and <code>Typeahead</code>.</small></h3>
<p>The majority of your React code will be implementing composite components.</p>
<p>Composite components are higher-level components with custom rendering logic
that may compose other composite components or DOM components.</p>
<div class="highlight"><pre><code class="javascript language-javascript" data-lang="javascript"><span class="cm">/** @jsx React.DOM */</span>
<span class="kd">var</span> <span class="nx">LinkButton</span> <span class="o">=</span> <span class="nx">React</span><span class="p">.</span><span class="nx">createClass</span><span class="p">({</span>
<span class="nx">render</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="o">&lt;</span><span class="nx">a</span> <span class="nx">className</span><span class="o">=</span><span class="s2">&quot;btn&quot;</span> <span class="o">/&gt;</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">});</span>
<span class="kd">var</span> <span class="nx">myButton</span> <span class="o">=</span> <span class="o">&lt;</span><span class="nx">LinkButton</span> <span class="o">/&gt;</span><span class="p">;</span>
</code></pre></div>
<p>This example defines a <code>LinkButton</code> component class using <code>React.createClass()</code>,
and its <code>render()</code> method composes the <code>&lt;a&gt;</code> DOM component.</p>
<h3>DOM Components <small>such as <code>div</code> and <code>span</code>.</small></h3>
<p>DOM components are the set of classes that correspond to browser DOM elements.
They are defined in <code>React.DOM</code> and can be brought &quot;into scope&quot; by setting
<code>@jsx React.DOM</code> in the docblock. See <a href="syntax.html">JSX Syntax</a> for more
details.</p>
<p>Although <code>React.DOM</code> components look like browser DOM elements, they differ in a
few ways:</p>
<ul>
<li>All property names, including event handlers, are camelCased.</li>
<li>JavaScript identifiers should be used, namely <code>className</code> and <code>htmlFor</code>.</li>
<li>The <code>style</code> prop expects an object instead of a string. The object should map
camelCased style properties to values, e.g. <code>{backgroundColor: &#39;#fff&#39;}</code>.</li>
</ul>
<p>Here is an example of a React link styled as a button with a click handler:</p>
<div class="highlight"><pre><code class="javascript language-javascript" data-lang="javascript"><span class="cm">/** @jsx React.DOM */</span>
<span class="kd">var</span> <span class="nx">handleClick</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span><span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Clicked!&#39;</span><span class="p">);};</span>
<span class="kd">var</span> <span class="nx">inlineStyle</span> <span class="o">=</span> <span class="p">{</span><span class="nx">textDecoration</span><span class="o">:</span> <span class="s1">&#39;none&#39;</span><span class="p">};</span>
<span class="kd">var</span> <span class="nx">myLink</span> <span class="o">=</span> <span class="o">&lt;</span><span class="nx">a</span> <span class="nx">className</span><span class="o">=</span><span class="s2">&quot;btn&quot;</span> <span class="nx">onClick</span><span class="o">=</span><span class="p">{</span><span class="nx">handleClick</span><span class="p">}</span> <span class="nx">style</span><span class="o">=</span><span class="p">{</span><span class="nx">inlineStyle</span><span class="p">}</span> <span class="o">/&gt;</span><span class="p">;</span>
</code></pre></div>
<div class="docs-prevnext">
<a class="docs-prev" href="/react/docs/syntax.html">&larr; Prev</a>
<a class="docs-next" href="/react/docs/component-data.html">Next &rarr;</a>
</div>
</div>
</section>
<footer class="wrap">
<div class="left">A Facebook &amp; Instagram collaboration.</div>
<div class="right">&copy; 2013 Facebook Inc.</div>
</footer>
</div>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-41298772-1', 'facebook.github.io');
ga('send', 'pageview');
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
</script>
</body>
</html>