react 01

一、React脚手架的安装

使用 npm/cnpm 安装React官方脚手架(create-react-app)到全局

npm install create-react-app -g

二、创建第一个React项目

4.1、构建一个名为 demo 项目

create-react-app demo

4.2、进入这个文件夹,并且跑起来

切换到demo文件夹   cd demo

运行项目           npm start

项目运行,自动打开谷歌浏览器看见项目页面

如果有webpack的版本问题,可以把webpack卸载

 

npm uninstal webpack

然后重新下载

//npm i webpack@报错中要求的版本

npm i -g webpack@4.44.2

        

 

三,项目架构解析

public/index.html入口文件,

 

 

//index.js 就是react的入口文件 , 必须叫这个名字
//1. 引入核心模块
import React from "react";
import ReactDOM from "react-dom";
import App from "./App7.js";



//把对应的内容渲染到 id 为root 标签上

//ReactDOM.render(参数1,参数2)    把参数1 渲染到 参数2 上
// 参数1 : 要把谁渲染
// 参数2 : 渲染到谁身上 


// ------------------简写方式------
ReactDOM.render(
    <App />     //jsx
    ,
    document.getElementById("root")
)
// ---------------------------------


// --------------------复杂的写法----
// ReactDOM.render(
//     React.createElement("div",null,"hello,react")
//     ,
//     document.getElementById("root")
// )
// -----------------------------------

四、VSCode中JSX的编写优化

在vscode中的 文件>首选项>设置 中,直接搜索 include Language ,进入 settings.json

找到 "emmet.includeLanguages" 字段,添加:

"emmet.includeLanguages": {
        "javascript": "javascriptreact"
},

推荐图形化操作

 

搜索 trigger ,找到如图位置,打钩:

设置后就可以通过 标签名+Tab 键快速码出标签

 

五,组件化开发

1.在src中新建一个文件App.js (一个组件)

2.引入核心模块

3.定义一个组件

4.将组件开放出去

5.在src/index.js文件中使用组件

//src/App.js
//1. 组件化开发   组件首字母  推荐大写 
//(1).引入核心模块
import React from 'react'

//定义一个组件类 
class App extends React.Component{
    render(){ //渲染组件
        // return (要返回的组件的内容)
        return (
            // 这里面的代码称为jsx代码
            <div>
                <p>我知道为什么一到学校就困了,因为学校是让人追梦的地方</p>
                <p>我知道为什么一到学校就困了,因为学校是让人追梦的地方</p>
                <p>我知道为什么一到学校就困了,因为学校是让人追梦的地方</p>
                <p>我知道为什么一到学校就困了,因为学校是让人追梦的地方</p>
            </div>
        )
    }
}

export default App;
//index.js 就是react的入口文件 , 必须叫这个名字
//1. 引入核心模块
import React from "react";
import ReactDOM from "react-dom";
import App from "./App.js";


ReactDOM.render(
    <App />     //jsx
    ,
    document.getElementById("root")
)

 以下的代码在src/index.js文件中使用组件引用的步骤就不展示了,都是一样的步骤

六.react基本知识(class,图片,style,label的使用)

//jsx 语法糖 
import React,{Component} from 'react';
import "./assets/css/style.css";
// 图片使用:1.先引入图片
import Img from "./assets/img/1.jpg";

export default class App2 extends Component {
    render(){
        return (
            <div>
                {/* jsx 的注释 
                    1. 行内css样式写法 
                      style="{js对象}"
                    2. class 要改成  className
                    3. 图片使用 , 先引入后使用   以后其他方法
                    4. label 标签的for 要改成 htmlFor
                    

                    总结: jsx 语法中  只要想运行js代码 加{} 
                */}
                <p style={{color:'red',background:'pink'}}>菜炒咸了,放一会就好了,因为时间可以冲淡一切</p>
                <p className="box"></p>
				// 图片使用:使用图片
                <img src={Img} width="100%" alt="" />
                <br />

                <label htmlFor="user">用户名</label>
				// 使用label可实现:当用户点击文字也可以将光标定位到输入框中
                <input type="name" name="" id="user" />

            </div>
        )
    }
}

运行结果:

 

 七. react 的循环  三元运算符

// react 的循环  三元运算符
import React,{Component} from 'react';

let name = "张三",age = 10,score = [89,99,10];
 
export default class App3 extends Component {
    
    render(){
        return(
            <div>
                <p>姓名:{name}</p>
                <p>年龄:{age}</p>
                <p>成年:{age>=18?'自愿':"犯法"}</p>
                <p>成绩:</p>
                <ul>
                {
                    score.map((v,k)=>{
                        return(
                            <li key={k}> {v} </li>
                            )
                    })
                }
                </ul>
            </div>
        )
    }
   
}

运行结果:

 八 .foreach循环

// react 的循环  三元运算符
import React,{Component} from 'react';

let name = "张三",age = 10,score = [89,99,10];
 
export default class App3 extends Component {
    
    render(){
        let a = [];
        score.forEach((item)=>{
            a.push(<li>{item}</li>)
            //react.createElement("li")
        })

        return(
            <div>
                <p>姓名:{name}</p>
                <p>年龄:{age}</p>
                <p>成绩:</p>
                <ul>
                    {a}
                </ul>
            </div>
        )
    }
    
}

 

九 .快速补全组件内容

1.下载插件ES7 React/Redux snippets

 2.rcc 快捷创建React组件

十 .事件帮定,插值语法

// 安装 ES7 Reactxxxxxxx插件
// rcc 快捷创建React组件

//事件 和 "插值语法" 的使用

import React, { Component } from 'react'
// 可以直接把Component也直接引入,这样就可以直接继承Component

export default class App4 extends Component {

    constructor(props) {
        super(props); //如果一个类,继承了其他类, 构造方法里,第一行必须写super()
        
        //定义一个数据
        this.state = {
            num:10
        }
    }
    
    render() {
        return (
            <div>
                <p>当前的数字是:{this.state.num}</p>
                {/* 绑定事件的时候 传入this的值 ****  */}
                <button onClick={this.dian1}>按钮666</button>
                <button onClick={this.dian2.bind(this)}>按钮+++</button>
            </div>
        )
    }
    
    //单机后调用的方法
    dian1(){
        console.log(666);
    }
    
    dian2() {
        this.setState({
            num:this.state.num+1
        })
    }

    
}

 

 

十一 .双向数据绑定

//双向绑定

import React, { Component } from 'react'

export default class App5 extends Component {
    constructor(props) {
        super(props);
        this.state = {
            val:"初始值"
        }
    }

    render() {
        return (
            <div>
                {/* 首先 input 设置一个 value   设置一个 onChange事件修改这个value对应的值 */}
                <input type="text" value={this.state.val} onChange={this.model.bind(this)}/>
                <p>{this.state.val}</p>
            </div>
        )
    }

    //双向绑定
    model(e) {
        console.log(e);
        console.log(e.target.value);
        this.setState({
            val:e.target.value
        })
    }

    
}

可通过e.target获取input的元素

 

十二 . 选项卡案例

//选项卡 
import React, { Component } from 'react';
import "./assets/css/tab.css";

export default class App6 extends Component {
    constructor(props){
        super(props);

        this.state = {
            num:2
        }
    }
    render() {
        return (
            <div className="tab_con">
                <div className="tab_btns">
                    <button className={this.state.num===1?"active":''} onClick={this.qie.bind(this,1)}>按钮1</button>
                    <button className={this.state.num===2?"active":''} onClick={this.qie.bind(this,2)}>按钮2</button>
                    <button className={this.state.num===3?"active":''} onClick={this.qie.bind(this,3)}>按钮3</button>
                </div>

                <div className="tab_cons">

                    <div className={this.state.num===1?"show":''}>按钮1 的内容</div>
                    <div className={this.state.num===2?"show":''}>按钮2 的内容</div>
                    <div className={this.state.num===3?"show":''}>按钮3 的内容</div>
                </div>
            </div>
        )
    }
    //切换
    qie(v) {
        this.setState({
            num:v
        })
    }
}
// 配合assets中的style.css

// .tab_cons div{
//     width:100%;
//     height:350px;
//     background:orange;
//     font-size:40px;
//     display:none;
// }
// .tab_con div.show{
//     display:block;
// }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值