美文网首页
React之入门,配置(一)

React之入门,配置(一)

作者: 喵呜Yuri | 来源:发表于2019-03-14 15:12 被阅读8次

    安装:

    在哪里都可以,是全局安装
    $  npm install -g create-react-app
    进入到你要创建的文件夹,创建myreact,过程有点慢,可以用淘宝镜像
    $ create-react-app myreact
    打开项目:
    $ npm start
    
    image.png

    文件结构:


    image.png

    与vue不同,react不能自动热加载,需要你刷新浏览器
    【React DOM 使用 camelCase 小驼峰命名 来定义属性的名称,而不是使用 HTML 的属性名称,例如,class`变成了 className,而 tabindex则对应着tabIndex】

    【React 元素都是immutable 不可变的。当元素被创建之后,你是无法改变其内容或属性的。一个元素就好像是动画里的一帧,它代表应用界面在某一时间点的样子

    组件:
    有俩种声明方法:

    function Testdiv() {
        return <div>测试div</div>
    }
    
    class Testdiv extends Component{
      render(){
        return(
            <div>测试div</div>
        )
      }
    }
    

    那这两种声明方法有什么区别呢?
    function:

    1  function component更易于编写阅读和测试
    2  代码量更少,上手容易
    3  因为没有状态,可以更好的实现容器和表现的分离,可以只负责表现层的逻辑,不用考虑因为复杂的逻辑去改变状态从而带来的麻烦,有利于代码复用。
    4  react团队提倡使用
    

    class:

    1  虽然function component 有很多好处,但是有些时候class component 还是不可替代的。
    2  当需要实现一些容器组件的时候,需要改变内部状态来实现自组件的改变的时候。
    3  当需要用到生命周期钩子函数实现一些功能的时候
    4  当我们需要提升性能时,性能是一个很重要的问题,有些时候我们需要减少组件的渲染次数,我们就需要在组件内部用shouldComponentUpdate 方法来去判断,或者继承React.PureComponent 类(自动调用shouldComponentUpdate)来实现state和props的浅比较进行判断组件是否重新渲染。
    

    【注意】方法名首写字母一定要大写


    image.png

    react生命周期:
    比较常用的应该是:
    componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。
    componentWillMount 在渲染前调用,在客户端也在服务端。

    我们来跑一个显示时间的定时器:

    class Testdiv extends Component{
      constructor(props) {
          super(props);
          this.state = {date: new Date(),aaa:'1'};
      }
        componentDidMount(){
          var this_ = this;
          this.timer = setInterval(function () {
              this_.setState({
                  date:new Date()
              })
          },1000);
        }
    
        tick(){
          this.setState({
              date:new Date()
          })
        }
        componentWillUnmount() {
            clearInterval(this.timer);
        }
    
        render(){
          return(
              <div>{this.state.date.toLocaleTimeString()}</div>
          )
        }
    }
    

    constructor的作用:


    image.png

    这里的this指的是?


    image.png

    指的是Testdiv本身

    扩展:es6箭头函数

     componentDidMount(){
          this.timer = setInterval(()=>this.tick(),1000);
          console.log(this);
        }
    

    为什么箭头函数就可以直接在this函数中接着写this不报错呢?
    箭头函数的this定义:箭头函数的this是在定义函数时绑定的,不是在执行过程中绑定的。简单的说,函数在定义时,this就继承了定义函数的对象。
    https://www.jianshu.com/p/c1ee12a328d2

    写一个类似toggle的东西


    image.png
    class ToggleDiv extends Component{
        constructor(props) {
            super(props);
            this.state = {istoggle :true};
            this.handleClick = this.handleClick.bind(this);
        }
        handleClick(){
          this.setState((prevState)=>({istoggle:!prevState.istoggle}));
        }
        render(){
          return(
                  <button onClick={this.handleClick}>状态是:{this.state.istoggle?'on':'off'}</button>
              )
        }
    }
    

    这里要注意的是:
    1.方法名称需要小驼峰式写法
    2.handleClick()方法中使用了箭头函数,prevState作为一个参数表示该类的state状态,叫什么都可以。
    箭头函数等同于:

      handleClick(){
            this.setState(function () {
                return {istoggle:!this.state.istoggle}
            })
        }
    

    3.this.handleClick = this.handleClick.bind(this);这句话一定要加【属性初始化器语法】
    否则handleClick方法没有主体,handleClick()中的this为:undefined
    如果这句话让你很烦,也可以用箭头函数这么写,但是建议用属性初始化器语法写,大神就是那么写的:

     handleClick = ()=>{
            this.setState(function () {
                return {istoggle:!this.state.istoggle}
            })
        }
    

    函数传参:

    class ToggleDiv extends Component{
        constructor(props) {
            super(props);
            this.state = {istoggle :true};
            this.handleClick = this.handleClick.bind(this);
        }
        handleClick(name,some,e){ //e要放到最后面
         console.log(name);
          this.setState((state_)=>({istoggle:!state_.istoggle}));
        }
        render(){
          return(
                  <button onClick={this.handleClick.bind(this,this.state.istoggle,'ww')}>状态是:{this.state.istoggle?'on':'off'}</button>
              )
        }
    }
    

    关于react开发设计,很有用https://blog.csdn.net/yisuowushinian/article/details/79045058

    相关文章

      网友评论

          本文标题:React之入门,配置(一)

          本文链接:https://www.haomeiwen.com/subject/avqouqtx.html