掌握react,这一篇就够了

论坛 期权论坛     
选择匿名的用户   2021-6-2 16:45   139   0
<div class="article fmt article__content">
<p>react众所周知的前端3大主流框架之一,由于出色的性能,完善的周边设施风头一时无两。本文就带大家一起掌握react。</p>
<h1>jsx语法</h1>
<p>前端MVVM主流框架都有一套自己的模板处理方法,react则使用它独特的jsx语法。在组件中插入html类似的语法,简化创建view的流程。</p>
<p>下面让我们来认识一下构建的两种元素</p>
<h2>原生元素</h2>
<pre class="blockcode"><code>ReactDOM.render((
  &lt;div&gt;
    &lt;h1&gt;标题&lt;/h1&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<p>通过简单的语法页面就会被插入一个div&#43;一个h1标签。原生的html元素可以被直接使用。以上的语法并不是js支持的语法,需要被转换之后才能运行。</p>
<h2>自定义元素</h2>
<p>react强大之处就在于可以组件的自定义,实现组件的复用。如果我们创建了一个组件。我们也可以通过jsx语法调用。</p>
<pre class="blockcode"><code>import * as React from &#39;react&#39;

class Page extends React.Component {
  render() {
    return (&lt;div&gt;
      home111 &amp;copy;  \ua9
    &lt;/div&gt;)
  }
}

ReactDOM.render((
  &lt;div&gt;
    &lt;Page/&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<p>我们定义了一个Page组件,可以在jsx里面像调用html一样直接调用。</p>
<h2>插入动态数据</h2>
<pre class="blockcode"><code>let name &#61; &#39;hi&#39;

ReactDOM.render((
  &lt;div&gt;
    {name}
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<p>使用{}就可以插入数据,但是{}中间的必须是js表达式,不能是语句。如果表达式的执行结果是一个数组,则会自动join。</p>
<h2>注释</h2>
<p>jsx语法和html语法一样,也是可以插入注释,只不过写的时候有一些区别</p>
<h3>子组件注释</h3>
<pre class="blockcode"><code>let name &#61; &#39;hi&#39;

ReactDOM.render((
  &lt;div&gt;
    {/* 注释 */}
    {name}
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<p>在子组件中插入注释,需要使用{}包裹起来,在/<em> </em>/之间插入注释文字。</p>
<h3>属性注释</h3>
<pre class="blockcode"><code>let name &#61; &#39;hi&#39;

ReactDOM.render((
  &lt;div&gt;
    {name}
    &lt;img /*
        多行注释
    */ src&#61;&#34;1.jpg&#34;/&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<p>在标签中间,可以插入一个多行注释,类似上面的代码。</p>
<h2>属性props</h2>
<ol><li>可以向使用html的attr一样使用属性,就像下面img的src一样</li></ol>
<pre class="blockcode"><code>let name &#61; &#39;hi&#39;

ReactDOM.render((
  &lt;div&gt;
    &lt;img src&#61;&#34;1.png&#34;/&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<ol><li>如果需要传递动态属性,使用{},多个属性,使用展开运算符</li></ol>
<pre class="blockcode"><code>let props &#61; {
    src: &#39;1.png&#39;,
    alt: &#39;1图片&#39;
}

ReactDOM.render((
  &lt;div&gt;
    &lt;img src&#61;{&#34;1.png&#34;}/&gt;
    &lt;img {...props}/&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<ol><li>两个转换,class--&gt;className for--&gt;htmlFor</li></ol>
<p>因为class和for是javascript关键字,所以这里需要用转换之后名称</p>
<pre class="blockcode"><code>ReactDOM.render((
  &lt;div className&#61;&#34;tab&#34;&gt;
    &lt;label htmlFor&#61;&#34;name&#34;&gt;姓名:&lt;/label&gt;&lt;input id&#61;&#34;name&#34;/&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<ol><li>布尔属性</li></ol>
<p>如果一个属性的值是布尔值,当这个值是true的时候则可以省略&#61;后面的值,只保留key。</p>
<pre class="blockcode"><code>ReactDOM.render((
  &lt;div className&#61;&#34;tab&#34;&gt;
    &lt;input type&#61;&#34;text&#34; required/&gt;
    &lt;input type&#61;&#34;text&#34; required&#61;{true}/&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<ol><li>原生元素的自定义属性</li></ol>
<p>react对元素属性做了校验,如果在原生属性上使用此元素不支持的属性,则不能编译成功。必须使用data-前缀</p>
<pre class="blockcode"><code>ReactDOM.render((
  &lt;div className&#61;&#34;tab&#34;&gt;
    &lt;input type&#61;&#34;text&#34; data-init&#61;&#34;22&#34;/&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<h2>插入html</h2>
<p>如果动态的插入html元素,react出于安全性考虑会自动帮我们转义。所以一定要动态的插入元素的话,使用dangerouslySetInnerHTML</p>
<pre class="blockcode"><code>ReactDOM.render((
  &lt;div className&#61;&#34;tab&#34;&gt;
    &lt;div dangerouslySetInnerHTML&#61;{<!-- -->{__html: &#39;&lt;span&gt;test&lt;/span&gt;&#39;}}&gt;&lt;/div&gt;
  &lt;/div&gt;
), document.getElementById(&#39;root&#39;))</code></pre>
<h1>React组件创建</h1>
<h2>React.createClass</h2>
<p>这是旧版本的api,使用React.createClass创建组件,配套的一些api&#xff0c
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP