react入门

  由于最近没有什么项目可做,所以学习了react框架,这里只是作为自己的笔记作为以后参考,如果要学习还是去官网去学习比较好一些。

  首先ES6肯定是要有一定的使用基础的,现在大多都是基于es6来开发。

  babel

  由于现在ES6对浏览器的支持还不是那么好,所以babel就应运而生了,它的主要作用就是把ES6的代码转换成我们之前没有ES6时的代码,否则有好一些浏览器是不认识ES6的语法的。

  初期学习的话还是不要依赖于react的脚手架进行学习吧,就在之前html页面中引入js文件就可以了。

  安装nodejs并下载三个文件

  我在这里就假装你有node的一些基础了,现在一个前端应该都对node有一定了了解了,如果你还不了解,抓紧时机学习一下哦,现在前端的好多构建工具什么的都是基于node npm 来搭建了,

  安装上node的时候会自动连带着npm会一起下载下来,如果知道如何下载,点击这里  去看下载教程

  下载三个npm包   

  babel-standalone  react react-dom

  直接在你要工作的文件夹目录中打开命令行,使用 npm i -S bebel-standalone react react-dom 进行下载,我们需要的是这三个包里面的三个js文件。

  bebel-standalone 由于react使用的是 jsx语法,所以我们需要这个bebel来把这jsx语法转换成浏览器可以识别的代码。 

  还有一个是react,一个是react-dom,其中react是react的核心代码。react的核心思想是虚拟Dom,其实虚拟Dom改变没有那么复杂,简单而言就是一个js的对象来表达一个dom包含的东西。包react-dom的核心功能就是把这些虚拟Dom渲染到文档中变成实际dom,当然了除了渲染这个功能之外还有一些其他的方法,这里就不多说了。

  引入js文件

  三个js文件的位置都在刚才下载下来的node_modules里面,具体位置如下,引入到页面中

1   <script src="./node_modules/babel-standalone/babel.js"> </script>
2   <script src="./node_modules/react/umd/react.development.js"></script>
3   <script src="./node_modules/react-dom/umd/react-dom.development.js"></script>

  搞完上面的那些之后就可以正式开始了。

  1.ES6代码转为ES5

 1 <script src="../node_modules/babel-standalone/babel.js"></script>
 2 // 引入上面那个文件之后 就会有一个 Babel的全局变量
 3 <script>
 4 
 5     const str = `
 6     const obj = {
 7       a: 1,
 8       b: 2
 9     };
10 
11     const {a, b} = obj;
12     `;
13 
14     let c = Babel.transform(str, {presets:['es2015']});
15     console.log(c);
16     console.log(c.code);  // 这里可以打印出来上面es6代码转换为es5的代码样子 如下图
17 
18 </script>

 

2. 基本jsx语法

  所有的前提都是基于引入上面那三个js文件而来的,这里就不多写了

 1 <div id="app"></div>
 2 
 3 <script type="text/babel">  // 注意这里的type的格式,引入那个babel文件之后 这里写这个格式浏览器就会识别
 4   console.log(ReactDOM);
 5 
 6   // 利用babel把h1标签渲染到#app里面
 7   ReactDOM.render(
 8     <h1>hello world</h1>,
 9     document.querySelector('#app')
10   );
11  </script>

此时打开浏览器就可以看到页面中#app那个div里面会有h1的标签,再看下面一个例子

 1 <script type="text/babel">
 2 
 3     const element = <div>
 4         111
 5         <h2>这里是h2</h2>
 6     </div>;
 7     
 8 
 9     ReactDOM.render(
10       element,
11       document.getElementById('app')
12     )
13 </script>

  可以打开浏览器再来浏览一下,你根据页面中的dom结构,和这个比对一下发现这段html代码居然就被插入到页面中了,你可能没有发现你居然在js代码中写了html代码,而且你没有用引号引起来,厉害。

  其实这种写法就是jsx语法,就是在js中写html或者说是xml就是jsx语法,因为经过了bebel编译所以是没有问题的不会报错的。

  注意: 这个里面的标签是必须需要闭合的

 3. 注释的写法

我们一般都会用 ()把我们要写的html代码包裹起来 换行重新写,这样结构清晰一些, 这里面的html代码只能有一个根节点 
在html代码包裹的地方你想要写js代码 就只能使用 {} 包裹起来写了,写到他们中间了。
只要记住 一旦你想要在html包裹的地方写js代码 就要写到 {} 中间 , 在 {} 中间可以随意的写js代码
 
1
const element = ( 2 <div> 3 { 4 只要进入了标签结构,除了在{}之中,就不能写js代码了 5 以下三种注释都不成立 6 // 7 /**/ 8 <!----> // 这种会报错 9 } 10 </div> 11 )
 1 const element = (
 2     // 注释呢  这里没有进入标签结构 算是js代码的注释
 3     <div>
 4     {
 5         // 这样写注释
 6         /*
 7                     *   这样写都是可以的
 8                     *
 9                     * */
10     }
11     { /*第二句注释*/ }
12     <h1>这里的h1标签</h1>
13     </div>
14 );
15 ReactDOM.render(
16     // 这里是注释吗
17     element,
18     document.querySelector('#app')
19 );
20 
21 element 的内容还可以是一个函数的返回值
比如 这样 return (
  <div>
    <p>这个样子的</p>
  </div>
)

4. 插值

  如何把js中的数据插入到 自己写的 html代码里面呢, 也是使用 {}的样子, 就直接写js代码就好了

 1 let data = {
 2   name: '狗蛋'
 3 };
 4 const element = (
 5   <div>
 6     {
 7       <p>
 8         {data.name}
 9       </p>
10     }
11   </div>
12 );
13 ReactDOM.render(
14   element,
15   document.querySelector('#app')
16 );

 那里面还可以写一些函数,可以渲染数组之类的东西, 也可以是一个函数的返回值,看下面的代码

 1 let arr = [
 2   'name', 'age', 'sex'
 3 ];
 4 
 5 function fn() {
 6   return (
 7     <div>
 8       代码
 9     </div>
10   )
11 }
12 
13 const element = (
14   <div>
15     <div>
16       {
17         <ul>
18           {
19             arr.map((item, index) => {
20               return (
21                 <li key={index}>{item}</li>
22               )
23             })
24           }
25         </ul>
26       }
27     </div>
28     <div>
29       {
30         fn()
31       }
32     </div>
33   </div>
34 );
35 ReactDOM.render(
36   element,
37   document.querySelector('#app')
38 );

5. 节点属性

看下面的代码 你写上去,去浏览器中查看一下

1 const element = (
2   <div>
3     <input type='text' value="input的value值" />
4   </div>
5 );
6 ReactDOM.render(
7   element,
8   document.querySelector('#app')
9 );

会发现这样的错误

意思是让你把value改为 defaultValue,类似的错误还有一些其他的标签,当你用错的时候,看一下这个报错应该可以改为正确的,如果改不正确可以百度查一下

class -> className

单标签一定要闭合
value -> defaultValue
checked -> defaultChecked

 

6. 列表渲染

 1 // 数据可以是数字 字符串 标签(不要加引号 加了引号就是字符串)
 2 // 要绑定key key是唯一标识 可以提升代码性能 diff算法
 3 
 4 const arr = [
 5   1,2,3
 6 ];
 7 const arr1 = [
 8   'a', 'b', 'c'
 9 ];
10 const arr2 = [
11   <li key={'这里的1'}>这里的li</li>,
12   <li key="2">这里的li2</li>,
13   <li key="3">这里的li3</li>
14 ];
15 const arr4 = [
16   {name: '狗蛋1', age: 12},
17   {name: '狗蛋2', age: 13},
18   {name: '狗蛋3',age: 14},
19 ];
20 const element = (
21   <div>{arr}</div>
22 );
23 
24 const element2 = (function () {
25   let elementStr = [];
26   arr4.forEach((item,index) => {
27     elementStr.push(<li key={index}>{item.name} {item.age} </li>);
28   });
29   return elementStr;
30 })();

可以把上面的代码插入到页面中试一试, arr4的话,是需要自己把结构拆分出来的, {} 会自动把数组一个一个的渲染出来

7. 事件处理

只是事件是需要驼峰来命名了,它的好多东西和vue非常非常像

 1 function fn(){
 2     console.log('fn事件')
 3 }
 4 const element = (
 5     <div>
 6     {
 7         // onClick 事件驼峰命名
 8         // 事件绑定 都会给事件一个处理函数
 9     }
10     <input type="button" value={'事件函数调用'} onClick={fn} />
11     <input type="button" value={'行内事件'} onClick={function () {
12     alert(1);
13     console.log('我这里写了一个函数');
14     }} />
15     <input type="button" value={'es6语法'} onClick={() => alert('es6的语法')} />
16     <input type="button" value="行间样式" onClick={alert('11')} />
17 </div>
18 );

 

  如果你看了我的文章有了一些收获我会非常高兴的,由于能力有限,文章有的部分解释的不到位,希望在以后的日子里能慢慢提高自己能力,如果不足之处,还望指正。

posted @ 2018-12-21 16:54  一步一步向上爬  阅读(1002)  评论(0编辑  收藏  举报