基础部分

创建一个react的项目

  • 创建一个react的项目

    全局安装 react 指令

        // 全局安装react (根据需要安装,不是必须的)
    npm i -g react // 或者 yarn -global react // 全局安装 react的脚手架 (创建react的应用,必须安装脚手架)
    npm i -g create-react-app // 或者 yarn -global create-react-app

    使用脚手架创建应用

    create-react-app 应用名称
    // 例如创建一个TodoList应用
    create-react-app todo-list

    注意点:

      1.全局安装create-react-app才能使用脚手架创建应用
    2.应用名称全部为小写字母,不能出现“TodoList”这样的名称

组件的使用

  • 组件的组成

        // React 是react组件必不可少的,用于支持jsx语法的模块,虽然看不到引用,但是不能少
    // Component 所有的react的组件都继承于Component,它是react组件的基类
    import React, { Component } from 'react'; // TodoItem 自定义的组件
    import TodoItem from "./TodoItem" // 定义TodoList组件 ,该组件继承于基类Component
    class TodoList extends Component {
    /***
    * constructor 当前类的构造函数
    * props 简单的理解:是父类传递的参数,例如 传递的值 或 方法,它是一个对象
    * super(props) 简单的理解是:继承父类中的传递的参数
    **/
    constructor(props){
    super(props)
    // state 是 所有react变量的仓储,简单理解就是:当前组件的变量都放在这个对象中
    this.state = {
    inputValue: "",
    List: []
    }
    // 使用 bind绑定this,让方法中的this永远指向当前的组件(可根据需求改变this的指向)
    this.getList = this.getList.bind(this)
    this.inputChang = this.inputChang.bind(this)
    this.addItem = this.addItem.bind(this)
    this.delItem = this.delItem.bind(this)
    }
    // react组件必不可少的方法,return 返回的是jsx的模板,可以理解为类似html+js的模板
    render() {
    return (
    {/*在jsx中只能有一个根标签,使用<></>(幽灵标签)包裹,既能满足jsx的语法格式,在浏览器解析时不会解析幽灵标签,减少了dom树结构节点 */}
    <>
    <div>
    <input value={this.state.inputValue} onChange={this.inputChang} /> <button onClick={this.addItem}>添加</button>
    </div>
    <ul>
    {this.getList()}
    </ul>
    </>
    );
    }; // 遍历输出item
    getList() {
    ...
    }
    // 动态改变输入框的值
    inputChang( e ) {
    ...
    } // 添加item
    addItem() {
    ...
    } // 删除item
    delItem(index) {
    ...
    }
    }
    // 导出TodoList
    export default TodoList;
  • 认识jsx

    简单的jsx的语法

    ...
    render() {
    return (
    {/*在jsx中只能有一个根标签,使用<></>(幽灵标签)包裹,既能满足jsx的语法格式,在浏览器解析时不会解析幽灵标签,减少了dom树结构节点 */}
    <>
    <div>
    <input value={this.state.inputValue} onChange={this.inputChang} /> <button onClick={this.addItem}>添加</button>
    </div>
    <ul>
    {this.getList()}
    </ul>
    </>
    );
    }; ...
    1. 在jsx中只能有一个根标签,使用<></>(幽灵标签)包裹,既能满足jsx的语法格式,在浏览器解析时不会解析幽灵标签,减少了dom树结构节点,也可以使用代码片段(Fragments ),效果和<></>相同,只是Fragments 还有更广泛的使用,后面会有详细说明

    2. 在jsx中使用注释,多行使用{/* 注释内容 */},单行使用

          // 多行
      
          {/* 多行注释内容 */}
      {/*
      多行注释内容
      */} // 单行
      {
      // 单行注释内容
      }
    3. 在jsx中使用组件的变量或者方法,使用{}包裹

    4. 在jsx中绑定的方法默认this指向undefined,所以需要使用bind绑定this的指向

          // 方式1: 在constructor指定this
      constructor(props){
      super(props)
      this.state = {
      inputValue: "",
      List: []
      }
      this.getList = this.getList.bind(this)
      this.inputChang = this.inputChang.bind(this)
      this.addItem = this.addItem.bind(this)
      this.delItem = this.delItem.bind(this)
      } // 方式2:绑定事件的时候指定this ...
      <li onClick={this.delItem.bind(this,index)}></li>
      ...
  • 组件的基本通讯

  1. 最简单的 父 ---> 子 传值


    // 父组件通过在子组件标签上设置属性传递数据
    <Boy
    teacherName={ this.state.teacherName }
    /> <Girl
    teacherName={ this.state.teacherName }
    /> // 子组件通过this.props获取父组件传递的数据
    // this.props.teacherName 获取老师的名称
    render(){
    return (
    <>
    <p>
    我是{this.state.boyName},我的老师是{this.props.teacherName},
    我对老师很
    <button onClick={()=> this.props.say(this.state.boyName,"满意") } >
    满意
    </button>
    </p>
    </>
    )
    }
  2. 最简单的 子 ---> 父 通讯


    // 父组件通过在子组件标签上设置属性传递数据
    <Boy
    say = { this.stuSay }
    /> <Girl
    say = { this.stuSay }
    />
    // 子组件通过this.props获取父组件传递的数据
    // this.props.say 获取父组件提供的方法,通过调用父组件的方法,将传递的数据作为参数传入,当父组件的方法被调用,就通过获取当前方法参数的方式,得到了子组件传递的数据
    render(){
    return (
    <>
    <p>
    我是{this.state.boyName},
    我对老师很
    <button onClick={()=> this.props.say(this.state.boyName,"满意") } >
    满意
    </button>
    </p>
    </>
    )
    }
  3. 最简单的非父子通讯

核心思路:找到共同的父组件,同时使用父组件传递的值和方法

过程有些复杂,这里省略了

teacher.js

import React,{ Component } from "react"

// 导入 Boy(男孩) 和 Girl(女孩) 组件
import Boy from "./boy"
import Girl from "./girl" export default class Teacher extends Component {
constructor(props){
super(props)
this.state = {
teacherName: "Tom",
stuName: "",
stuSayContent: "",
boyName: "",
girlName: "",
boySayContent: "",
girlSayContent: ""
}
this.stuSay = this.stuSay.bind(this);
this.boySaySecret = this.boySaySecret.bind(this);
this.grilSaySecret = this.grilSaySecret.bind(this);
}
render(){
let evaluation = false
if (this.state.stuName!=="" && this.state.stuSayContent) {
evaluation = true
}
return (
<>
<p>我是{ this.state.teacherName }老师</p> <div>
{
evaluation ? (<p>学生评价:{this.state.stuName}对我很{this.state.stuSayContent}</p>) : " "
}
</div> <Boy
say = { this.stuSay }
teacherName={ this.state.teacherName }
boySaySecret = {this.boySaySecret}
girlSayContent = {this.state.girlSayContent}
/> <Girl
say = { this.stuSay }
teacherName={ this.state.teacherName }
grilSaySecret = {this.grilSaySecret}
boySayContent = {this.state.boySayContent}
/>
</>
)
}
stuSay(stuName,stuSayContent){
this.setState(()=>{
return {
stuSayContent,
stuName
}
})
}
boySaySecret(constent){
this.setState(()=>{
return {
boySayContent : constent
}
})
}
grilSaySecret(constent){
this.setState(()=>{
return {
girlSayContent : constent
}
})
}
}

boy.js


import React,{ Component } from "react" export default class Boy extends Component {
constructor(props){
super(props)
this.state = {
boyName: "龙震天"
}
}
render(){
return (
<>
<p>
我是{this.state.boyName},我的老师是{this.props.teacherName},
我对老师很
<button onClick={()=> this.props.say(this.state.boyName,"满意") } >
满意
</button>,
我想对女孩说:<button onClick={()=> this.props.boySaySecret("我喜欢你")}>悄悄话</button>,
她对我说:{this.props.girlSayContent} </p>
</>
)
} }

gril.js


import React,{ Component } from "react" export default class Boy extends Component {
constructor(props){
super(props)
this.state = {
girlName: "怜香玉"
}
}
render(){
return (
<>
<p>
我是{this.state.girlName},我的老师是{this.props.teacherName},
我对老师很
<button onClick={()=> this.props.say(this.state.girlName,"不满意") } >
不满意
</button>,
我想对男孩说:<button onClick={() => this.props.grilSaySecret("我也是")}>悄悄话</button>,
他对我说:{this.props.boySayContent}
</p>
</>
)
} }

高级部分

待续....

我的react学习的更多相关文章

  1. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

  2. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  3. React学习资料

    以下是我整理的React学习资料,包括:React基础.Redux.reat-router, redux middleware, higher order components, React验证等, ...

  4. React学习笔记(一) 基础知识

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我. React的基 ...

  5. React学习系列

    React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初 ...

  6. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  7. react 学习与使用记录

    相关技术:webpack+react+react-router+redux+immutable 郭永峰react学习指南 1.git bash--windows命令行工具 --教程 下载地址 2. i ...

  8. 【JAVASCRIPT】React学习-JSX 语法

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 JSX 语法 1. 定义 JSX 是javascript + xml 的合集,我们可以将javascript 与 ht ...

  9. 【JAVASCRIPT】React学习-如何构建一个组件

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 组件化思想 组件就是 UI + UI 交互逻辑,组件有三个常规map , 分别为state 状态 . props 数据 ...

  10. 【JAVASCRIPT】React学习- 数据流(组件通信)

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...

随机推荐

  1. arcengine 正确绑定办法

    if (!RuntimeManager.Bind(ProductCode.Engine)) { if (!RuntimeManager.Bind(ProductCode.Desktop)) { Mes ...

  2. Keras vs. PyTorch in Transfer Learning

    We perform image classification, one of the computer vision tasks deep learning shines at. As traini ...

  3. chrome 浏览器调用 ocx 插件

    原文:http://blog.csdn.net/wangchao1988ok/article/details/45193489 IE 上使用 ocx 插件网上已经有很多资料说明,这里就不重复了,那如何 ...

  4. maven 结合mybaits整合框架,打包时mapper.xml文件,mapper目录打不进war包去问题

    首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,ma ...

  5. C# 判断程序是否已经在运行

    方式1: /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { //获取欲启 ...

  6. iOS设计模式 - 备忘录

    iOS设计模式 - 备忘录 原理图 说明 1. 在不破坏封装的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态 2. 本人已经将创建状态与恢复状态 ...

  7. [翻译] CNPPopupController

    CNPPopupController CNPPopupController is a simple and versatile class for presenting a custom popup ...

  8. shell study

    目录 shell记录 执行脚本 变量使用 注释 shell传递参数 运算符 echo printf test 流程控制 if ... else ... for while until case 跳出循 ...

  9. C# HttpWebRequest 笔记

    目录: 1,HttpWebRequest 实例化 2,GetResponse 获取请求结果 3,获取结果 4,获取流信息 HttpWebRequest 是一个Http 请求类,继承于 WebReque ...

  10. 有效集 matlab代码

    %有效集 function activeset H=[2 -1; -1 4]; c=[-1 -10]'; Ae=[ ]; be=[ ]; Ai=[-3 -2; 1 0; 0 1]; bi=[-6 0 ...