react脚手架的基本使用

创建项目的方式:

方式一:

安装react脚手架:
npm i create-react-app -g 全局安装

创建一个react项目:
create-react-app myapp myapp是项目的名字

方式二:

如果不想全局安装create-react-app,那么可以使用npx
npx create-react-app myapp
使用脚手架创建的项目,默认有这几个库:
1)react raect顶级库(核心库)
2)react-dom react代码要在web上运行,就需要使用react-dom 如果你的代码需要在原生app上运行,你需要引入react-native
3)react-scripts 包含了运行或打包react项目的配置和脚本

运行项目:

cd myapp
npm run start


react中组件的使用

①创建组件,然后再通过export default 导出
②然后在src中的入口(index.js)中导入
③通过ReactDom.render来渲染

例:

import ReactDOM from "react-dom"
import MyCom from "./components/MyCom"
ReactDOM.render(<MyCom name="react" link="https://react.docschina.org/" />, document.getElementById("root"))

通过class创建的组件接收数据:{this.props.xxx}
函数创建的组件接收数据:{props.xxx}即可

对props类型的校验

首先要引入:

import PropTypes from 'prop-types'

写法1(一般放最下边):

MyCom.propTypes  = {
    
    
    name:PropTypes.string,// 期待传入的name是一个string类型
}
MyCom.defaultProps = {
    
    
    address:"bj"
}

写法2(一般放constructor下边,render上边):

static defaultProps = {
    
    
    address:"bj"
 }
 static propTypes = {
    
    
    link:PropTypes.string
}

组件中状态的使用

状态(state):
在react中组件是核心之一,组件中状态是核心,有人把react也叫状态机。
状态是react组件内部的数据,不需要外部传入。类似于vue中data。
定义状态的方式一 推荐

constructor(){
    
    
    super();
    this.state = {
    
    
        number:100
     }
}

定义状态的方式二

    constructor(){
    
    
        super();
    }
    state = {
    
    
        number:666
    }

在jsx中就可以使用状态

    render(){
    
    
        return (
            <div>
                {
    
    /* 在jsx中就可以使用状态 */}
                <h1>{
    
    this.state.number}</h1>
            </div>
        )
    }

更新状态:

更新状态 在react中提供一个api,叫setState 类似于小程序中的中setData
更新状态机(在小程序中也需要更新状态机)
如果更新了状态机,那么它会自动调用render函数

//onClick是封装的属性,_dealChangePerson()是自己定义的方法
<button onClick={
    
     ()=>this._dealChangePerson() }>xxx</button>
    //直接在下面定义就行
    _dealChangePerson(){
    
    
        this.setState({
    
    
        })
    }

componentDidMount()

钩子函数:也可以用来修改状态
并不是每一次render后都要执行DidMount
在react中,修改状态的唯一途径是setState
更新状态的方式一(推荐)

    componentDidMount(){
    
    
         setTimeout(()=>{
    
    
            // 更新状态机(只要状态更新了,render函数就会重新执行)
            this.setState({
    
    
                counter:100
            })
        },2000)
   }

更新状态的方式二

   componentDidMount(){
    
    
        setTimeout(()=>{
    
    
            this.state.counter = 100
            this.setState({
    
    }); // 会引起重新render
        },2000)
   }

对于类组件来说,它的数据源可以是state,也可以是props

如果setState的参数是一个函数,函数默认有两个形参
形参1:表示上一次的状态
形参2:表示当前的组件接收的数据
更新状态必须在this的setState在次return,想要获取最新数据需要在第二个函数参数里获取

    componentDidMount(){
    
    
        // setState的参数可以是一个函数
        // 如果setState的参数是一个函数,函数默认有两个形参
        // 形参1:表示上一次的状态
        // 形参2:表示当前的组件接收的数据
        this.setState((preState,props)=>{
    
    
            console.log(preState, props);
            // 更新状态
            return {
    
    
                counter:preState.counter+100
            }
        }, ()=>{
    
      // setState中可以指定第二个函数参数
            // 在这里,可以获取最新的状态
            console.log(this.state.counter);
        })
    }

props和state

state是组件内部的状态,在组件内部可以通过setState进行修改,state修改了,界面会重新渲染。
state是组件内部的,局部地,只能在当前组件中使用的数据源。其它组件是不能使用或修改state的。
props是在使用组件时,传递给组件内部的数据,主要是外部传入的数据,react不推荐在组件内部修改props。
如果你搞不清楚,在一个组件中使用props还是使用state,那么推荐使用props。尽量少地使用state,多用props。
如果说一个组件中有state,那么这个组件叫有状态组件,使用class声明的组件就是有状态组件。
如果一个组件中没有state,那么这个组件叫无状态组件,使用函数声明的组件就是无状态组件,函数式组件+hooks也可以达到在函数组件中使用状态的目的。

props和state:

1)属性能从父组件中获取,状态不可以,状态是组件自身的,内容的,局部的。
2)属性可以在父组件中修改,修改了,传入给子组件中的props数据会也发生改变。也会引起render重新执行。
3)属性可以设置默认值, 状态也可以设置默认值
4)不要组件中修改属性的值,但是,状态的值通常我们会修改

猜你喜欢

转载自blog.csdn.net/QZ9420/article/details/112194465