首页 > 其他 > 详细

React入门第二天

时间:2021-02-25 10:08:44      阅读:34      评论:0      收藏:0      [点我收藏+]

组件

组件,从概念上类似于 JavaScript 函数。它接受任意的?入参(即 “props”),并返回?用于描述?页?面展示内容的 React 元素。组件有两种形式: class组件和function组件。

class组件

class组件通常拥有状态和?生命周期, 继承于Component, 实现render?方法。?用class组件创建?一个 Clock:

import React from ‘react‘;
?
export default class Clock extends React.Component{
   constructor(props){
       super(props);
       this.state={date:new Date()};
  }
?
   componentDidMount(){
       this.timerID=setInterval(() => {
           this.setState({date:new Date()});
      }, 1000);//这里timerID要用this来传递,只用const是无法传递的
  }
   componentWillUnmount(){
       clearInterval(this.timerID);
  }
   render(){
       // const {date}=this.state;//这里是另外 一种写法
       return <div>{this.state.date.toLocaleTimeString()}</div>
  }
}

function组件

函数组件通常?无状态,仅关注内容展示,返回渲染结果即可。 从React16.8开始引?入了了hooks,函数组件也能够拥有状态。 ?用function组件创建?一个Clock:

import React,{useState,useEffect} from "react";
?
export function Clock(props){
       const [date,setDate]=useState(new Date());
       useEffect(()=>{
           const timer=setInterval(() => {
               setDate(new Date());//这里没有this....就只是setDate与对象this又有不同
          }, 1000);//这里都是函数式组件 ,timer是一个计时器函数
           return ()=>{clearInterval(timer);};//等于这一个写法 ()=>clearInterval(timer) 写法//清理 也会有问题
           //return的内容在组件unMount的时候使用
      },[]);
       return <div>{date.toLocaleTimeString()}</div>
}

正确使用setState

正确使?用setState setState(partialState, callback)

  1. partialState : object|function ?用于产?生与当前state合并的?子集。

  2. callback : function state更更新之后被调?用。

 

关于 setState() 你应该了了解三件事:

不不要直接修改 State

错误代码

// 错误示范
this.state.comment = ‘Hello‘;

 

而是用setState来改变

// 正确使?用
this.setState({comment: ‘Hello‘});

State 的更更新可能是异步的

出于性能考虑, React 可能会把多个 setState() 调?用合并成?一个调?用。 观察以下例例?子中log的值和button显示的counter。

import React,{Component} from ‘react‘;
?
export  default class Counter  extends Component{
   constructor(props){
       super(props);
       this.state={value:0};
  }
   changeValue= v=>{
       this.setState({value:this.state.value+v});
  }
   setCounter=()=>{
       this.changeValue(1);
  };
   render(){
       const {value}=this.state;
       return (
           <div>
               <h1>SetStatePage</h1>
               <button onClick={this.setCounter}>{value}</button>
           </div>
      );
  }
}

获取最新的state值的方法

  1. 在回调中获取状态值

    changeValue = v => {
    this.setState(
    {
    counter: this.state.counter + v
    },
    () => {
    console.log("counter", this.state.counter);
    }
    );
    };
    1. 使?用定时器?:

      setTimeout(() => {
      this.setCounter();
      }, 0);

       

  1. 原?生事件中修改状态

    componentDidMount(){
    document.body.addEventListener(‘click‘, this.changeValue, false)
    }

    总结: setState只有在合成事件和?生命周期函数中是异步的,在原?生事件和setTimeout中都是同步 的,这?里里的异步其实是批量量更更新。

    State 的更更新会被合并

    changeValue = v => {
    this.setState({
    counter: this.state.counter + v
    });
    };
    setCounter = () => {
    this.changeValue(1);
    this.changeValue(2);
    };

    如果想要链式更更新state:

    changeValue = v => {
    this.setState(state => ({ counter: state.counter + v }));
    };
    setCounter = () => {
    this.changeValue(1);
    this.changeValue(2);
    };

React入门第二天

原文:https://www.cnblogs.com/anatkh/p/14444899.html

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