react入门

框架和库的概念:

库:小而巧  
框架:大而全

什么是模块化和组件化:

模块化:从代码的角度上分析,抽离公共模块封装复用;
组件化:从Ui的角度上考虑分析;

虚拟DOM:

本质:用js对象来模拟dom元素和嵌套关系;
目的:为了实现元素的高效更新;

Diff算法:

tree.diff:新旧两棵DOM树,逐层对比的过程;
component.diff: 每一层中组件级别的对比;
element.diff:如果类型相同进行元素对比的过程;

react用webpack4.0步骤:

 1.运行npm init -y快速初始化项目;
 2.在项目根目录创建dist和src产品目录;
 3.在src下创建index.html  main.js
 4.安装webpack 命令:cnpm  i webpack -D
 cnpm i webpack-cli -D

react的三大体系:

react.js  :组件编写
reactNative: 移动端开发
reactVr: 虚拟现实技术开发

react开发环境搭建(管理员身份运行):

npm install -g create-react-app
create-react-app demo1
cd demo1
npm start

项目文件目录:

package.json:第三方包和配置文件;
package-lock.json:锁定安装的版本号(一般不会改);
node_modules:脚手架下载的第三方包;
public:公用的文件;
    public-favicon.ico:图标;
    public-index.html:模板文件;
    public-manifest.json:移动端的配置;
src:项目开发的主要目录:
    src-index.js:项目的入口文件;

react的组件化开发:

// index.js
//react挂载到那个组件中:
ReactDOM.render(<App />, document.getElementById('root'));

jsx的简单用法:

1.通俗的理解遇到"{"就是js,遇到“<”就是html;
2.使用默认方法:
function App() {
  return (
    <ul className="list">
       <li>李慷</li>
    </ul>
  )
}
3.使用component:
import React,{Component} from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
 render(){
    return (
     <ul className="list">
       <li>李慷</li>
    </ul>
     ) 
    }
}
export default App;

</Fragment>组件的用法:

类似一个包装元素,在最外一层:
import React,{Component,Fragment} from 'react';
 <Fragment>
 </Fragment>

简单的demo(增加菜单选项):

//1.学习方法,属性,结构的写法:
//2.熟悉绑定事件的方法;
//3.熟悉方法的创建
import React, { Component, Fragment } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      inputValue: '',
      list: ['js' ,'css']
    }
  }
  render() {
    return (
      <Fragment>
        <div>
          <input  value={this.state.inputValue} onChange={this.inputChange.bind(this)}/>
          <button onClick={this.addLsit.bind(this)}>增加</button>
        </div>
        <ul className="list">
           {
            this.state.list.map((item,index)=>{
               return(
                <li key={index+item}>
                <span>{item}</span>
                <button onClick={this.deleteItem.bind(this,index)}>删除</button>
                </li>
               )
              
            })
          }
        </ul>
      </Fragment>
    )
  }
  inputChange(e){
    this.setState({
      inputValue:e.target.value
    })
   
  }
  //增加列表:
  addLsit(){
    this.setState({
      list:[...this.state.list,this.state.inputValue],
      inputValue:''
    })
  }

  //删除列表项:
  deleteItem(index){
    let list = this.state.list
    list.splice(index,1)
    this.setState({
      list:list
    })

  }
}
export default App;

下载Simple React Snippets 快速书写项目:

imrc 
cc

react 的组件拆分和父子组件传值:

//父组件:
import React, { Component, Fragment } from 'react';
import Home from  './App.test'
import './App.css';

class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      inputValue: '',
      list: ['js' ,'css']
    }
  }
  render() {
    return (
      
      <Fragment>
       <div>
         <label>增加服务</label>
         <input  value={this.state.inputValue}  onChange={this.inputChange.bind(this)}/>
         <button onClick={this.addLsit.bind(this)}>增加</button>
       </div>
       <ul>
         {
           this.state.list.map((item,index)=>{
             return (
                 <Home
                  key={index+item} 
                  content={item}  
                  index={index}
                  deleteItem={this.deleteItem.bind(this)} />
             )
           })
         }
       </ul>
        </Fragment>
    )
  }
  inputChange(e){
    this.setState({
      inputValue:e.target.value
    })
   
  }
  //增加列表:
  addLsit(){
    this.setState({
      list:[...this.state.list,this.state.inputValue],
      inputValue:''
    })
  }

  //删除列表项:
  deleteItem(index){
    let list = this.state.list
    list.splice(index,1)
    this.setState({
      list:list
    })

  }
}
export default App;


//子组件:
import React, { Component, Fragment } from 'react';


class Home  extends Component {
  constructor(props){
   super(props)
   this.hadleClick = this.hadleClick.bind(this)
   }
  
  render() {
    return (
      <li onClick={this.hadleClick}>{this.props.content}</li>
    )
  }

 hadleClick(){
   console.log(this.props.index)
   this.props.deleteItem(this.props.index)
 }
}
export default  Home;



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 为了获得更好的阅读体验,请访问原地址:传送门 一、React 简介 React 是什么 React 是一个起源于 ...
    我没有三颗心脏阅读 1,144评论 3 5
  • 一、React简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript...
    艾剪疏阅读 320评论 0 2
  • 作者:阮一峰原文地址:http://www.ruanyifeng.com/blog/2015/03/react.h...
    IT程序狮阅读 1,087评论 0 16
  • 现在最热门的前端框架,毫无疑问是React。在基于React的React Native发布一天之内,就获得了 50...
    Mycro阅读 1,002评论 3 6
  • 1.React 的学习资源 react官方首页https://facebook.github.io/react/ ...
    贾里阅读 2,829评论 0 0