首页 > 其他 > 详细

react从入门到熟悉(回顾react)

时间:2020-05-31 11:54:36      阅读:41      评论:0      收藏:0      [点我收藏+]

首先npm和node环境就不说了,不懂得参考我写的vue2.0安装,里面有npm和node安装的介绍
react开发
参考官网创建react项目搭建开发环境,安装的是最新版
npx create-react-app my-app(这个是项目名称)
安装完成后cd my-app 直接npm run start 看到运行之后的效果
技术分享图片

 

先按官网走一遍基础吧
JSX简介
JSX是一个Javascript的语法扩展,

了解下jsx编译

技术分享图片
Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用。
const element = (
   <div className="box">
     <div className="title">hello</div>
     <button>click</button>
   </div> 
);//()如果存在标签结构,并且标签结构要换行,就需要这个

const element = React.createElement(
   "div",
   {className:"box"},
   React.createElement(
      "div",
      {className:"title"},
      "hello"
   ),
   React.createElement(
      "button",
      null,
      "click"
   )
);
每个 DOM 元素的结构都可以用 JavaScript 的对象来表示
{
    tag:‘div‘,
    attrs:{className:‘box‘},
    children:[
       {
           tag:‘div‘,
           attrs:{className:‘title‘},
           children:[‘hello‘]
        },
        {
            tag:‘button‘,
            attrs:null,
            children:[‘click‘]
        }
    ]  
}
View Code

警告:

因为 JSX 语法上更接近 JavaScript 而不是 HTML,所以 React DOM 使用 camelCase(小驼峰命名)来定义属性的名称,而不使用 HTML 属性名称的命名约定。

例如,JSX 里的 class 变成了 className,而 tabindex 则变为 tabIndex

ReactDom.render  渲染dom树
最简单的组件模板

注意: 组件名称必须以大写字母开头。

React 会将以小写字母开头的组件视为原生 DOM 标签。例如,<div /> 代表 HTML 的 div 标签,而 <Welcome /> 则代表一个组件,并且需在作用域内使用 Welcome

技术分享图片
//index.js
import React from ‘react‘;
import ReactDOM from ‘react-dom‘;
import ‘./index.css‘;
import App from ‘./App‘;
import * as serviceWorker from ‘./serviceWorker‘;

ReactDOM.render(
    <App />,
  document.getElementById(‘root‘)
);

//App
import React from ‘react‘;
class App extends React.Component{
  constructor(props){
    super(props);
    this.state={
      aa:‘hello world‘
    }
  }
  render(){
    return(
      <div>
        <h1>hello world</h1>
        <div>{this.state.aa}</div>
      </div>
    )
  }
}
export default App;
View Code

 vscode两个快捷键
imr     import React from ‘react‘
ccc  快速生成基础模板

state

/*react通过页面元素改变使用state进行处理*/

技术分享图片
import React from ‘react‘

class StateCompomemt extends React.Component {
    constructor(props) {
        super(props);
        this.state = { 
            count:10
        }
        /*绑值方法三*/
        this.increment=this.increment.bind(this);
    }
    
    render() { 
        return ( 
            <div>
                <h3>组件的state</h3>
                <p>{this.state.count}</p>
                {/*绑值方法一 bind绑定*/}
                {/* <button onClick={this.increment.bind(this)}>增加</button> */}
                {/*绑值方法二 直接箭头函数*/}
                {/* <button onClick={()=>this.increment()}>增加</button> */}
                {/*箭头函数另一种*/}
                <button onClick={this.increment}>增加</button>
                {/*绑值方法三*/}
                <button onClick={this.increment}>增加</button>
            </div>
        );
    }
    increment(){
        this.setState({
            count:this.state.count+=1
        })
    }
    /*箭头函数另一种写法*/
    increment=()=>{
       this.setState({
            count:this.state.count+=1
        })
   }
}
 
export default StateCompomemt;        
View Code

以上介绍了3种事件绑定的方法,推荐使用箭头函数的方式
生命周期就不说了,我有一篇随便写过了

setState是同步还是异步的??

render() { 
    return ( 
        <div>
            <p>setState是同步还是异步</p>
            <p>{this.state.count}</p>
            <button onClick={this.increment}>增加</button>
        </div>
    );
}
increment=()=>{
    this.setState({
        count:this.state.count+1
    })
    console.log("dd",this.state.count)
}

 //改同步

<button onClick={this.increment.bind(this)}>增加</button>

 async increment(){
     await this.setStateAsync({count:this.state.count+1})
  }

  setStateAsync(state){

    return new Promise((resolve)=>{

      this.setState(state,resolve);

    })

  }

技术分享图片

 

 事实证明是异步的

官方给出的解释是,State 的更新可能是异步的,

出于性能考虑,React 可能会把多个 setState() 调用合并成一个调用。

因为 this.props 和 this.state 可能会异步更新,所以你不要依赖他们的值来更新下一个状态。

 事件处理条件渲染列表,这个参考我的另一篇react有介绍

 先写到这里,后期持续更新。。。

react从入门到熟悉(回顾react)

原文:https://www.cnblogs.com/zhihou/p/12991829.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!