CDN React

目录

  1. CDN 3 个
  2. React CDN Hello World
  3. React CDN 卡片组件

CDN

<!-- 核心库 -->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
 <!-- DOM相关 -->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
 <!-- 支持JSX -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

React

与其他框架类似, React 也需要一个入口点,例如 div#app 如此。

这是一个 React Hello World 案例,一定不要忘记在 script 标签添加 type="text/babel"

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>react</title>
    <style>
      body {
        font-family: sans-serif;
      }
    </style>
  </head>
  <body>
    <div id="app"></div>
    <!-- 核心库 -->
    <script
      crossorigin
      src="https://unpkg.com/react@16/umd/react.development.js"
    ></script>
    <!-- DOM相关 -->
    <script
      crossorigin
      src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"
    ></script>
    <!-- 支持JSX -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

    <script type="text/babel">
      window.onload = (e) => {
        const app = document.querySelector('#app');
        const element = <h1>Hello World</h1>;
        ReactDOM.render(element, app);
      };
    </script>
  </body>
</html>

React 卡片组件

CDN 的方式使用 React 编写组件,模仿 堆糖(还差得远呢):

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>card</title>
    <style>
      body {
        font-family: sans-serif;
      }
      div.container {
        position: relative;
      }
      div.card {
        float: left;
        position: relative;
        top: 0px;
        left: 0px;
        width: 200px;
        border: 1px solid #dcdcdc;
        border-radius: 1px;
        margin: 10px;
      }
      div.card > img {
        width: 190px;
        margin: 5px;
      }
      div.card > p {
        margin: 5px;
      }

      div.comment {
        border-top: 1px solid #dcdcdc;
        width: 90%;
      }
      div.comment > div.left {
        display: inline-block;
        width: 20%;
      }
      div.comment > div.right {
        display: inline-block;
        width: 78%;
      }
      div.comment > div > img {
        margin: 8px 5px;
        border-radius: 15px;
        width: 20px;
        height: 20px;
      }

      div.comment > div > p {
        display: block;
        line-height: 10px;
      }
      div.comment > div > p.comment {
        color: #999;
        font-size: 12px;
      }
    </style>
  </head>
  <body>
    <div id="app"></div>
    <!-- 核心库 -->
    <script
      crossorigin
      src="https://unpkg.com/react@16/umd/react.development.js"
    ></script>
    <!-- DOM相关 -->
    <script
      crossorigin
      src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"
    ></script>
    <!-- 支持JSX -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <script type="text/babel">
      window.onload = (e) => {
        const app = document.querySelector('#app');

        const imgList = [
          {
            url:
              'https://a-ssl.duitang.com/uploads/item/201905/08/20190508202050_iecsU.thumb.700_0.jpeg',
            content: '你奏凯!!!!!!',
            comment: [
              {
                avator:
                  'https://c-ssl.duitang.com/uploads/item/201906/17/20190617103524_yxzwV.thumb.700_0.jpeg',
                user: '毛九',
                content: '好萌!!!!'
              },
              {
                avator:
                  'https://c-ssl.duitang.com/uploads/item/201906/17/20190617103609_5NYHG.thumb.700_0.jpeg',
                user: '好鸭好鸭',
                content: '好可爱!!!!'
              }
            ]
          },
          {
            url:
              'https://c-ssl.duitang.com/uploads/item/201905/15/20190515232319_XSmQS.thumb.700_0.jpeg',
            content: '不敢看...',
            comment: []
          },
          {
            url:
              'https://c-ssl.duitang.com/uploads/item/201901/30/20190130052011_npvqd.thumb.700_0.jpeg',
            content: '小龙妈',
            comment: []
          },
          {
            url:
              'https://c-ssl.duitang.com/uploads/item/201906/13/20190613194116_lliqi.thumb.700_0.jpeg',
            content: '帅的一批',
            comment: []
          },
          {
            url:
              'https://c-ssl.duitang.com/uploads/item/201906/13/20190613194212_mdfmx.thumb.700_0.jpeg',
            content: 'sunshine',
            comment: [
              {
                avator:
                  'https://c-ssl.duitang.com/uploads/item/201907/15/20190715222710_cuzxl.thumb.700_0.jpg',
                user: '织世',
                content: '收集到  我和星河都甘做你的陪衬'
              },
              {
                avator:
                  'https://c-ssl.duitang.com/uploads/item/201907/10/20190710215420_ljdzi.thumb.700_0.jpeg',
                user: '远远',
                content: '阳光美丽'
              }
            ]
          },
          {
            url:
              'https://c-ssl.duitang.com/uploads/item/201906/27/20190627190022_KNGi3.thumb.700_0.jpeg',
            content: '动漫头像٩(˃̶͈̀௰˂̶͈́)و小鹿搬运',
            comment: []
          },
          {
            url:
              'https://c-ssl.duitang.com/uploads/item/201905/12/20190512193253_vHKLu.thumb.700_0.jpeg',
            content: 'GALeeの自截',
            comment: []
          },
          {
            url:
              'https://c-ssl.duitang.com/uploads/item/201906/17/20190617103603_kLaci.thumb.700_0.jpeg',
            content: '动漫头像',
            comment: [
              {
                avator:
                  'https://c-ssl.duitang.com/uploads/item/201906/07/20190607162548_bvlif.thumb.700_0.jpg',
                user: '我怎么会这么帅',
                content: '已收藏'
              }
            ]
          }
        ];

        const cardList = imgList.map((v, x) => {
          const comments = v.comment.map((m, y) => {
            return (
              <Comment
                avator={m.avator}
                user={m.user}
                comment={m.content}
                key={y}
              />
            );
          });
          return (
            <div className='container'>
              <Card url={v.url} content={v.content} key={x}>
                {comments}
              </Card>
            </div>
          );
        });

        ReactDOM.render(cardList, app);

        function Card(props) {
          return (
            <div className='card'>
              <img src={props.url} /> <p>{props.content}</p>
              {props.children}
            </div>
          );
        }

        function Comment(props) {
          return (
            <div className='comment'>
              <div className='left'>
                <img src={props.avator} />
              </div>
              <div className='right'>
                <p>{props.user}</p>
                <p className='comment'>{props.comment}</p>
              </div>
            </div>
          );
        }
      };
    </script>
  </body>
</html>

效果图:


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,882评论 1 18
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,630评论 0 7
  • 最近看了一本关于学习方法论的书,强调了记笔记和坚持的重要性。这几天也刚好在学习React,所以我打算每天坚持一篇R...
    gaoer1938阅读 1,758评论 0 5
  • react简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript M...
    宸桐阅读 3,181评论 2 5
  • It's a common pattern in React to wrap a component in an ...
    jplyue阅读 3,321评论 0 2